// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: tensorflow/contrib/decision_trees/proto/generic_tree_model.proto

package tensorflow.decision_trees;

public final class GenericTreeModel {
  private GenericTreeModel() {}
  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 ModelOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.decision_trees.Model)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.tensorflow.decision_trees.DecisionTree decision_tree = 1;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.DecisionTree getDecisionTree();
    /**
     * <code>.tensorflow.decision_trees.DecisionTree decision_tree = 1;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.DecisionTreeOrBuilder getDecisionTreeOrBuilder();

    /**
     * <code>.tensorflow.decision_trees.Ensemble ensemble = 2;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.Ensemble getEnsemble();
    /**
     * <code>.tensorflow.decision_trees.Ensemble ensemble = 2;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.EnsembleOrBuilder getEnsembleOrBuilder();

    /**
     * <code>.google.protobuf.Any custom_model = 3;</code>
     */
    com.google.protobuf.Any getCustomModel();
    /**
     * <code>.google.protobuf.Any custom_model = 3;</code>
     */
    com.google.protobuf.AnyOrBuilder getCustomModelOrBuilder();

    /**
     * <code>repeated .google.protobuf.Any additional_data = 4;</code>
     */
    java.util.List<com.google.protobuf.Any> 
        getAdditionalDataList();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 4;</code>
     */
    com.google.protobuf.Any getAdditionalData(int index);
    /**
     * <code>repeated .google.protobuf.Any additional_data = 4;</code>
     */
    int getAdditionalDataCount();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 4;</code>
     */
    java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
        getAdditionalDataOrBuilderList();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 4;</code>
     */
    com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
        int index);

    public tensorflow.decision_trees.GenericTreeModel.Model.ModelCase getModelCase();
  }
  /**
   * <pre>
   * A generic handle for any type of model.
   * </pre>
   *
   * Protobuf type {@code tensorflow.decision_trees.Model}
   */
  public  static final class Model extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.decision_trees.Model)
      ModelOrBuilder {
    // Use Model.newBuilder() to construct.
    private Model(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Model() {
      additionalData_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private Model(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              tensorflow.decision_trees.GenericTreeModel.DecisionTree.Builder subBuilder = null;
              if (modelCase_ == 1) {
                subBuilder = ((tensorflow.decision_trees.GenericTreeModel.DecisionTree) model_).toBuilder();
              }
              model_ =
                  input.readMessage(tensorflow.decision_trees.GenericTreeModel.DecisionTree.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((tensorflow.decision_trees.GenericTreeModel.DecisionTree) model_);
                model_ = subBuilder.buildPartial();
              }
              modelCase_ = 1;
              break;
            }
            case 18: {
              tensorflow.decision_trees.GenericTreeModel.Ensemble.Builder subBuilder = null;
              if (modelCase_ == 2) {
                subBuilder = ((tensorflow.decision_trees.GenericTreeModel.Ensemble) model_).toBuilder();
              }
              model_ =
                  input.readMessage(tensorflow.decision_trees.GenericTreeModel.Ensemble.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((tensorflow.decision_trees.GenericTreeModel.Ensemble) model_);
                model_ = subBuilder.buildPartial();
              }
              modelCase_ = 2;
              break;
            }
            case 26: {
              com.google.protobuf.Any.Builder subBuilder = null;
              if (modelCase_ == 3) {
                subBuilder = ((com.google.protobuf.Any) model_).toBuilder();
              }
              model_ =
                  input.readMessage(com.google.protobuf.Any.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((com.google.protobuf.Any) model_);
                model_ = subBuilder.buildPartial();
              }
              modelCase_ = 3;
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>();
                mutable_bitField0_ |= 0x00000008;
              }
              additionalData_.add(
                  input.readMessage(com.google.protobuf.Any.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_ & 0x00000008) == 0x00000008)) {
          additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
        }
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Model_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Model_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.decision_trees.GenericTreeModel.Model.class, tensorflow.decision_trees.GenericTreeModel.Model.Builder.class);
    }

    private int bitField0_;
    private int modelCase_ = 0;
    private java.lang.Object model_;
    public enum ModelCase
        implements com.google.protobuf.Internal.EnumLite {
      DECISION_TREE(1),
      ENSEMBLE(2),
      CUSTOM_MODEL(3),
      MODEL_NOT_SET(0);
      private final int value;
      private ModelCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static ModelCase valueOf(int value) {
        return forNumber(value);
      }

      public static ModelCase forNumber(int value) {
        switch (value) {
          case 1: return DECISION_TREE;
          case 2: return ENSEMBLE;
          case 3: return CUSTOM_MODEL;
          case 0: return MODEL_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public ModelCase
    getModelCase() {
      return ModelCase.forNumber(
          modelCase_);
    }

    public static final int DECISION_TREE_FIELD_NUMBER = 1;
    /**
     * <code>.tensorflow.decision_trees.DecisionTree decision_tree = 1;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.DecisionTree getDecisionTree() {
      if (modelCase_ == 1) {
         return (tensorflow.decision_trees.GenericTreeModel.DecisionTree) model_;
      }
      return tensorflow.decision_trees.GenericTreeModel.DecisionTree.getDefaultInstance();
    }
    /**
     * <code>.tensorflow.decision_trees.DecisionTree decision_tree = 1;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.DecisionTreeOrBuilder getDecisionTreeOrBuilder() {
      if (modelCase_ == 1) {
         return (tensorflow.decision_trees.GenericTreeModel.DecisionTree) model_;
      }
      return tensorflow.decision_trees.GenericTreeModel.DecisionTree.getDefaultInstance();
    }

    public static final int ENSEMBLE_FIELD_NUMBER = 2;
    /**
     * <code>.tensorflow.decision_trees.Ensemble ensemble = 2;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.Ensemble getEnsemble() {
      if (modelCase_ == 2) {
         return (tensorflow.decision_trees.GenericTreeModel.Ensemble) model_;
      }
      return tensorflow.decision_trees.GenericTreeModel.Ensemble.getDefaultInstance();
    }
    /**
     * <code>.tensorflow.decision_trees.Ensemble ensemble = 2;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.EnsembleOrBuilder getEnsembleOrBuilder() {
      if (modelCase_ == 2) {
         return (tensorflow.decision_trees.GenericTreeModel.Ensemble) model_;
      }
      return tensorflow.decision_trees.GenericTreeModel.Ensemble.getDefaultInstance();
    }

    public static final int CUSTOM_MODEL_FIELD_NUMBER = 3;
    /**
     * <code>.google.protobuf.Any custom_model = 3;</code>
     */
    public com.google.protobuf.Any getCustomModel() {
      if (modelCase_ == 3) {
         return (com.google.protobuf.Any) model_;
      }
      return com.google.protobuf.Any.getDefaultInstance();
    }
    /**
     * <code>.google.protobuf.Any custom_model = 3;</code>
     */
    public com.google.protobuf.AnyOrBuilder getCustomModelOrBuilder() {
      if (modelCase_ == 3) {
         return (com.google.protobuf.Any) model_;
      }
      return com.google.protobuf.Any.getDefaultInstance();
    }

    public static final int ADDITIONAL_DATA_FIELD_NUMBER = 4;
    private java.util.List<com.google.protobuf.Any> additionalData_;
    /**
     * <code>repeated .google.protobuf.Any additional_data = 4;</code>
     */
    public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
      return additionalData_;
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 4;</code>
     */
    public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
        getAdditionalDataOrBuilderList() {
      return additionalData_;
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 4;</code>
     */
    public int getAdditionalDataCount() {
      return additionalData_.size();
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 4;</code>
     */
    public com.google.protobuf.Any getAdditionalData(int index) {
      return additionalData_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 4;</code>
     */
    public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
        int index) {
      return additionalData_.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 {
      if (modelCase_ == 1) {
        output.writeMessage(1, (tensorflow.decision_trees.GenericTreeModel.DecisionTree) model_);
      }
      if (modelCase_ == 2) {
        output.writeMessage(2, (tensorflow.decision_trees.GenericTreeModel.Ensemble) model_);
      }
      if (modelCase_ == 3) {
        output.writeMessage(3, (com.google.protobuf.Any) model_);
      }
      for (int i = 0; i < additionalData_.size(); i++) {
        output.writeMessage(4, additionalData_.get(i));
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (modelCase_ == 1) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, (tensorflow.decision_trees.GenericTreeModel.DecisionTree) model_);
      }
      if (modelCase_ == 2) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, (tensorflow.decision_trees.GenericTreeModel.Ensemble) model_);
      }
      if (modelCase_ == 3) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, (com.google.protobuf.Any) model_);
      }
      for (int i = 0; i < additionalData_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, additionalData_.get(i));
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.decision_trees.GenericTreeModel.Model)) {
        return super.equals(obj);
      }
      tensorflow.decision_trees.GenericTreeModel.Model other = (tensorflow.decision_trees.GenericTreeModel.Model) obj;

      boolean result = true;
      result = result && getAdditionalDataList()
          .equals(other.getAdditionalDataList());
      result = result && getModelCase().equals(
          other.getModelCase());
      if (!result) return false;
      switch (modelCase_) {
        case 1:
          result = result && getDecisionTree()
              .equals(other.getDecisionTree());
          break;
        case 2:
          result = result && getEnsemble()
              .equals(other.getEnsemble());
          break;
        case 3:
          result = result && getCustomModel()
              .equals(other.getCustomModel());
          break;
        case 0:
        default:
      }
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getAdditionalDataCount() > 0) {
        hash = (37 * hash) + ADDITIONAL_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getAdditionalDataList().hashCode();
      }
      switch (modelCase_) {
        case 1:
          hash = (37 * hash) + DECISION_TREE_FIELD_NUMBER;
          hash = (53 * hash) + getDecisionTree().hashCode();
          break;
        case 2:
          hash = (37 * hash) + ENSEMBLE_FIELD_NUMBER;
          hash = (53 * hash) + getEnsemble().hashCode();
          break;
        case 3:
          hash = (37 * hash) + CUSTOM_MODEL_FIELD_NUMBER;
          hash = (53 * hash) + getCustomModel().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.decision_trees.GenericTreeModel.Model parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Model parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Model parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Model parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Model parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Model 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 tensorflow.decision_trees.GenericTreeModel.Model parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Model 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 tensorflow.decision_trees.GenericTreeModel.Model parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Model 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(tensorflow.decision_trees.GenericTreeModel.Model 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 generic handle for any type of model.
     * </pre>
     *
     * Protobuf type {@code tensorflow.decision_trees.Model}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.decision_trees.Model)
        tensorflow.decision_trees.GenericTreeModel.ModelOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Model_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Model_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.decision_trees.GenericTreeModel.Model.class, tensorflow.decision_trees.GenericTreeModel.Model.Builder.class);
      }

      // Construct using tensorflow.decision_trees.GenericTreeModel.Model.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getAdditionalDataFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (additionalDataBuilder_ == null) {
          additionalData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          additionalDataBuilder_.clear();
        }
        modelCase_ = 0;
        model_ = null;
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Model_descriptor;
      }

      public tensorflow.decision_trees.GenericTreeModel.Model getDefaultInstanceForType() {
        return tensorflow.decision_trees.GenericTreeModel.Model.getDefaultInstance();
      }

      public tensorflow.decision_trees.GenericTreeModel.Model build() {
        tensorflow.decision_trees.GenericTreeModel.Model result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.decision_trees.GenericTreeModel.Model buildPartial() {
        tensorflow.decision_trees.GenericTreeModel.Model result = new tensorflow.decision_trees.GenericTreeModel.Model(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (modelCase_ == 1) {
          if (decisionTreeBuilder_ == null) {
            result.model_ = model_;
          } else {
            result.model_ = decisionTreeBuilder_.build();
          }
        }
        if (modelCase_ == 2) {
          if (ensembleBuilder_ == null) {
            result.model_ = model_;
          } else {
            result.model_ = ensembleBuilder_.build();
          }
        }
        if (modelCase_ == 3) {
          if (customModelBuilder_ == null) {
            result.model_ = model_;
          } else {
            result.model_ = customModelBuilder_.build();
          }
        }
        if (additionalDataBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.additionalData_ = additionalData_;
        } else {
          result.additionalData_ = additionalDataBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        result.modelCase_ = modelCase_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          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, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.decision_trees.GenericTreeModel.Model) {
          return mergeFrom((tensorflow.decision_trees.GenericTreeModel.Model)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.decision_trees.GenericTreeModel.Model other) {
        if (other == tensorflow.decision_trees.GenericTreeModel.Model.getDefaultInstance()) return this;
        if (additionalDataBuilder_ == null) {
          if (!other.additionalData_.isEmpty()) {
            if (additionalData_.isEmpty()) {
              additionalData_ = other.additionalData_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureAdditionalDataIsMutable();
              additionalData_.addAll(other.additionalData_);
            }
            onChanged();
          }
        } else {
          if (!other.additionalData_.isEmpty()) {
            if (additionalDataBuilder_.isEmpty()) {
              additionalDataBuilder_.dispose();
              additionalDataBuilder_ = null;
              additionalData_ = other.additionalData_;
              bitField0_ = (bitField0_ & ~0x00000008);
              additionalDataBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getAdditionalDataFieldBuilder() : null;
            } else {
              additionalDataBuilder_.addAllMessages(other.additionalData_);
            }
          }
        }
        switch (other.getModelCase()) {
          case DECISION_TREE: {
            mergeDecisionTree(other.getDecisionTree());
            break;
          }
          case ENSEMBLE: {
            mergeEnsemble(other.getEnsemble());
            break;
          }
          case CUSTOM_MODEL: {
            mergeCustomModel(other.getCustomModel());
            break;
          }
          case MODEL_NOT_SET: {
            break;
          }
        }
        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 {
        tensorflow.decision_trees.GenericTreeModel.Model parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.decision_trees.GenericTreeModel.Model) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int modelCase_ = 0;
      private java.lang.Object model_;
      public ModelCase
          getModelCase() {
        return ModelCase.forNumber(
            modelCase_);
      }

      public Builder clearModel() {
        modelCase_ = 0;
        model_ = null;
        onChanged();
        return this;
      }

      private int bitField0_;

      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.DecisionTree, tensorflow.decision_trees.GenericTreeModel.DecisionTree.Builder, tensorflow.decision_trees.GenericTreeModel.DecisionTreeOrBuilder> decisionTreeBuilder_;
      /**
       * <code>.tensorflow.decision_trees.DecisionTree decision_tree = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.DecisionTree getDecisionTree() {
        if (decisionTreeBuilder_ == null) {
          if (modelCase_ == 1) {
            return (tensorflow.decision_trees.GenericTreeModel.DecisionTree) model_;
          }
          return tensorflow.decision_trees.GenericTreeModel.DecisionTree.getDefaultInstance();
        } else {
          if (modelCase_ == 1) {
            return decisionTreeBuilder_.getMessage();
          }
          return tensorflow.decision_trees.GenericTreeModel.DecisionTree.getDefaultInstance();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.DecisionTree decision_tree = 1;</code>
       */
      public Builder setDecisionTree(tensorflow.decision_trees.GenericTreeModel.DecisionTree value) {
        if (decisionTreeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          model_ = value;
          onChanged();
        } else {
          decisionTreeBuilder_.setMessage(value);
        }
        modelCase_ = 1;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.DecisionTree decision_tree = 1;</code>
       */
      public Builder setDecisionTree(
          tensorflow.decision_trees.GenericTreeModel.DecisionTree.Builder builderForValue) {
        if (decisionTreeBuilder_ == null) {
          model_ = builderForValue.build();
          onChanged();
        } else {
          decisionTreeBuilder_.setMessage(builderForValue.build());
        }
        modelCase_ = 1;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.DecisionTree decision_tree = 1;</code>
       */
      public Builder mergeDecisionTree(tensorflow.decision_trees.GenericTreeModel.DecisionTree value) {
        if (decisionTreeBuilder_ == null) {
          if (modelCase_ == 1 &&
              model_ != tensorflow.decision_trees.GenericTreeModel.DecisionTree.getDefaultInstance()) {
            model_ = tensorflow.decision_trees.GenericTreeModel.DecisionTree.newBuilder((tensorflow.decision_trees.GenericTreeModel.DecisionTree) model_)
                .mergeFrom(value).buildPartial();
          } else {
            model_ = value;
          }
          onChanged();
        } else {
          if (modelCase_ == 1) {
            decisionTreeBuilder_.mergeFrom(value);
          }
          decisionTreeBuilder_.setMessage(value);
        }
        modelCase_ = 1;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.DecisionTree decision_tree = 1;</code>
       */
      public Builder clearDecisionTree() {
        if (decisionTreeBuilder_ == null) {
          if (modelCase_ == 1) {
            modelCase_ = 0;
            model_ = null;
            onChanged();
          }
        } else {
          if (modelCase_ == 1) {
            modelCase_ = 0;
            model_ = null;
          }
          decisionTreeBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.DecisionTree decision_tree = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.DecisionTree.Builder getDecisionTreeBuilder() {
        return getDecisionTreeFieldBuilder().getBuilder();
      }
      /**
       * <code>.tensorflow.decision_trees.DecisionTree decision_tree = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.DecisionTreeOrBuilder getDecisionTreeOrBuilder() {
        if ((modelCase_ == 1) && (decisionTreeBuilder_ != null)) {
          return decisionTreeBuilder_.getMessageOrBuilder();
        } else {
          if (modelCase_ == 1) {
            return (tensorflow.decision_trees.GenericTreeModel.DecisionTree) model_;
          }
          return tensorflow.decision_trees.GenericTreeModel.DecisionTree.getDefaultInstance();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.DecisionTree decision_tree = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.DecisionTree, tensorflow.decision_trees.GenericTreeModel.DecisionTree.Builder, tensorflow.decision_trees.GenericTreeModel.DecisionTreeOrBuilder> 
          getDecisionTreeFieldBuilder() {
        if (decisionTreeBuilder_ == null) {
          if (!(modelCase_ == 1)) {
            model_ = tensorflow.decision_trees.GenericTreeModel.DecisionTree.getDefaultInstance();
          }
          decisionTreeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              tensorflow.decision_trees.GenericTreeModel.DecisionTree, tensorflow.decision_trees.GenericTreeModel.DecisionTree.Builder, tensorflow.decision_trees.GenericTreeModel.DecisionTreeOrBuilder>(
                  (tensorflow.decision_trees.GenericTreeModel.DecisionTree) model_,
                  getParentForChildren(),
                  isClean());
          model_ = null;
        }
        modelCase_ = 1;
        onChanged();;
        return decisionTreeBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.Ensemble, tensorflow.decision_trees.GenericTreeModel.Ensemble.Builder, tensorflow.decision_trees.GenericTreeModel.EnsembleOrBuilder> ensembleBuilder_;
      /**
       * <code>.tensorflow.decision_trees.Ensemble ensemble = 2;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Ensemble getEnsemble() {
        if (ensembleBuilder_ == null) {
          if (modelCase_ == 2) {
            return (tensorflow.decision_trees.GenericTreeModel.Ensemble) model_;
          }
          return tensorflow.decision_trees.GenericTreeModel.Ensemble.getDefaultInstance();
        } else {
          if (modelCase_ == 2) {
            return ensembleBuilder_.getMessage();
          }
          return tensorflow.decision_trees.GenericTreeModel.Ensemble.getDefaultInstance();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.Ensemble ensemble = 2;</code>
       */
      public Builder setEnsemble(tensorflow.decision_trees.GenericTreeModel.Ensemble value) {
        if (ensembleBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          model_ = value;
          onChanged();
        } else {
          ensembleBuilder_.setMessage(value);
        }
        modelCase_ = 2;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Ensemble ensemble = 2;</code>
       */
      public Builder setEnsemble(
          tensorflow.decision_trees.GenericTreeModel.Ensemble.Builder builderForValue) {
        if (ensembleBuilder_ == null) {
          model_ = builderForValue.build();
          onChanged();
        } else {
          ensembleBuilder_.setMessage(builderForValue.build());
        }
        modelCase_ = 2;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Ensemble ensemble = 2;</code>
       */
      public Builder mergeEnsemble(tensorflow.decision_trees.GenericTreeModel.Ensemble value) {
        if (ensembleBuilder_ == null) {
          if (modelCase_ == 2 &&
              model_ != tensorflow.decision_trees.GenericTreeModel.Ensemble.getDefaultInstance()) {
            model_ = tensorflow.decision_trees.GenericTreeModel.Ensemble.newBuilder((tensorflow.decision_trees.GenericTreeModel.Ensemble) model_)
                .mergeFrom(value).buildPartial();
          } else {
            model_ = value;
          }
          onChanged();
        } else {
          if (modelCase_ == 2) {
            ensembleBuilder_.mergeFrom(value);
          }
          ensembleBuilder_.setMessage(value);
        }
        modelCase_ = 2;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Ensemble ensemble = 2;</code>
       */
      public Builder clearEnsemble() {
        if (ensembleBuilder_ == null) {
          if (modelCase_ == 2) {
            modelCase_ = 0;
            model_ = null;
            onChanged();
          }
        } else {
          if (modelCase_ == 2) {
            modelCase_ = 0;
            model_ = null;
          }
          ensembleBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Ensemble ensemble = 2;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Ensemble.Builder getEnsembleBuilder() {
        return getEnsembleFieldBuilder().getBuilder();
      }
      /**
       * <code>.tensorflow.decision_trees.Ensemble ensemble = 2;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.EnsembleOrBuilder getEnsembleOrBuilder() {
        if ((modelCase_ == 2) && (ensembleBuilder_ != null)) {
          return ensembleBuilder_.getMessageOrBuilder();
        } else {
          if (modelCase_ == 2) {
            return (tensorflow.decision_trees.GenericTreeModel.Ensemble) model_;
          }
          return tensorflow.decision_trees.GenericTreeModel.Ensemble.getDefaultInstance();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.Ensemble ensemble = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.Ensemble, tensorflow.decision_trees.GenericTreeModel.Ensemble.Builder, tensorflow.decision_trees.GenericTreeModel.EnsembleOrBuilder> 
          getEnsembleFieldBuilder() {
        if (ensembleBuilder_ == null) {
          if (!(modelCase_ == 2)) {
            model_ = tensorflow.decision_trees.GenericTreeModel.Ensemble.getDefaultInstance();
          }
          ensembleBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              tensorflow.decision_trees.GenericTreeModel.Ensemble, tensorflow.decision_trees.GenericTreeModel.Ensemble.Builder, tensorflow.decision_trees.GenericTreeModel.EnsembleOrBuilder>(
                  (tensorflow.decision_trees.GenericTreeModel.Ensemble) model_,
                  getParentForChildren(),
                  isClean());
          model_ = null;
        }
        modelCase_ = 2;
        onChanged();;
        return ensembleBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> customModelBuilder_;
      /**
       * <code>.google.protobuf.Any custom_model = 3;</code>
       */
      public com.google.protobuf.Any getCustomModel() {
        if (customModelBuilder_ == null) {
          if (modelCase_ == 3) {
            return (com.google.protobuf.Any) model_;
          }
          return com.google.protobuf.Any.getDefaultInstance();
        } else {
          if (modelCase_ == 3) {
            return customModelBuilder_.getMessage();
          }
          return com.google.protobuf.Any.getDefaultInstance();
        }
      }
      /**
       * <code>.google.protobuf.Any custom_model = 3;</code>
       */
      public Builder setCustomModel(com.google.protobuf.Any value) {
        if (customModelBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          model_ = value;
          onChanged();
        } else {
          customModelBuilder_.setMessage(value);
        }
        modelCase_ = 3;
        return this;
      }
      /**
       * <code>.google.protobuf.Any custom_model = 3;</code>
       */
      public Builder setCustomModel(
          com.google.protobuf.Any.Builder builderForValue) {
        if (customModelBuilder_ == null) {
          model_ = builderForValue.build();
          onChanged();
        } else {
          customModelBuilder_.setMessage(builderForValue.build());
        }
        modelCase_ = 3;
        return this;
      }
      /**
       * <code>.google.protobuf.Any custom_model = 3;</code>
       */
      public Builder mergeCustomModel(com.google.protobuf.Any value) {
        if (customModelBuilder_ == null) {
          if (modelCase_ == 3 &&
              model_ != com.google.protobuf.Any.getDefaultInstance()) {
            model_ = com.google.protobuf.Any.newBuilder((com.google.protobuf.Any) model_)
                .mergeFrom(value).buildPartial();
          } else {
            model_ = value;
          }
          onChanged();
        } else {
          if (modelCase_ == 3) {
            customModelBuilder_.mergeFrom(value);
          }
          customModelBuilder_.setMessage(value);
        }
        modelCase_ = 3;
        return this;
      }
      /**
       * <code>.google.protobuf.Any custom_model = 3;</code>
       */
      public Builder clearCustomModel() {
        if (customModelBuilder_ == null) {
          if (modelCase_ == 3) {
            modelCase_ = 0;
            model_ = null;
            onChanged();
          }
        } else {
          if (modelCase_ == 3) {
            modelCase_ = 0;
            model_ = null;
          }
          customModelBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>.google.protobuf.Any custom_model = 3;</code>
       */
      public com.google.protobuf.Any.Builder getCustomModelBuilder() {
        return getCustomModelFieldBuilder().getBuilder();
      }
      /**
       * <code>.google.protobuf.Any custom_model = 3;</code>
       */
      public com.google.protobuf.AnyOrBuilder getCustomModelOrBuilder() {
        if ((modelCase_ == 3) && (customModelBuilder_ != null)) {
          return customModelBuilder_.getMessageOrBuilder();
        } else {
          if (modelCase_ == 3) {
            return (com.google.protobuf.Any) model_;
          }
          return com.google.protobuf.Any.getDefaultInstance();
        }
      }
      /**
       * <code>.google.protobuf.Any custom_model = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> 
          getCustomModelFieldBuilder() {
        if (customModelBuilder_ == null) {
          if (!(modelCase_ == 3)) {
            model_ = com.google.protobuf.Any.getDefaultInstance();
          }
          customModelBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder>(
                  (com.google.protobuf.Any) model_,
                  getParentForChildren(),
                  isClean());
          model_ = null;
        }
        modelCase_ = 3;
        onChanged();;
        return customModelBuilder_;
      }

      private java.util.List<com.google.protobuf.Any> additionalData_ =
        java.util.Collections.emptyList();
      private void ensureAdditionalDataIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>(additionalData_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> additionalDataBuilder_;

      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
        if (additionalDataBuilder_ == null) {
          return java.util.Collections.unmodifiableList(additionalData_);
        } else {
          return additionalDataBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public int getAdditionalDataCount() {
        if (additionalDataBuilder_ == null) {
          return additionalData_.size();
        } else {
          return additionalDataBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public com.google.protobuf.Any getAdditionalData(int index) {
        if (additionalDataBuilder_ == null) {
          return additionalData_.get(index);
        } else {
          return additionalDataBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public Builder setAdditionalData(
          int index, com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.set(index, value);
          onChanged();
        } else {
          additionalDataBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public Builder setAdditionalData(
          int index, com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.set(index, builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public Builder addAdditionalData(com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.add(value);
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public Builder addAdditionalData(
          int index, com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.add(index, value);
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public Builder addAdditionalData(
          com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.add(builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public Builder addAdditionalData(
          int index, com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.add(index, builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public Builder addAllAdditionalData(
          java.lang.Iterable<? extends com.google.protobuf.Any> values) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, additionalData_);
          onChanged();
        } else {
          additionalDataBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public Builder clearAdditionalData() {
        if (additionalDataBuilder_ == null) {
          additionalData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          additionalDataBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public Builder removeAdditionalData(int index) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.remove(index);
          onChanged();
        } else {
          additionalDataBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public com.google.protobuf.Any.Builder getAdditionalDataBuilder(
          int index) {
        return getAdditionalDataFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
          int index) {
        if (additionalDataBuilder_ == null) {
          return additionalData_.get(index);  } else {
          return additionalDataBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
           getAdditionalDataOrBuilderList() {
        if (additionalDataBuilder_ != null) {
          return additionalDataBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(additionalData_);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public com.google.protobuf.Any.Builder addAdditionalDataBuilder() {
        return getAdditionalDataFieldBuilder().addBuilder(
            com.google.protobuf.Any.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public com.google.protobuf.Any.Builder addAdditionalDataBuilder(
          int index) {
        return getAdditionalDataFieldBuilder().addBuilder(
            index, com.google.protobuf.Any.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public java.util.List<com.google.protobuf.Any.Builder> 
           getAdditionalDataBuilderList() {
        return getAdditionalDataFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> 
          getAdditionalDataFieldBuilder() {
        if (additionalDataBuilder_ == null) {
          additionalDataBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder>(
                  additionalData_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          additionalData_ = null;
        }
        return additionalDataBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.decision_trees.Model)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.decision_trees.Model)
    private static final tensorflow.decision_trees.GenericTreeModel.Model DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.decision_trees.GenericTreeModel.Model();
    }

    public static tensorflow.decision_trees.GenericTreeModel.Model getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public tensorflow.decision_trees.GenericTreeModel.Model getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ModelAndFeaturesOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.decision_trees.ModelAndFeatures)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Given a FeatureId feature_id, the feature's description is in
     * features[feature_id.id.value].
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.decision_trees.ModelAndFeatures.Feature&gt; features = 1;</code>
     */
    int getFeaturesCount();
    /**
     * <pre>
     * Given a FeatureId feature_id, the feature's description is in
     * features[feature_id.id.value].
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.decision_trees.ModelAndFeatures.Feature&gt; features = 1;</code>
     */
    boolean containsFeatures(
        java.lang.String key);
    /**
     * Use {@link #getFeaturesMap()} instead.
     */
    @java.lang.Deprecated
    java.util.Map<java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature>
    getFeatures();
    /**
     * <pre>
     * Given a FeatureId feature_id, the feature's description is in
     * features[feature_id.id.value].
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.decision_trees.ModelAndFeatures.Feature&gt; features = 1;</code>
     */
    java.util.Map<java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature>
    getFeaturesMap();
    /**
     * <pre>
     * Given a FeatureId feature_id, the feature's description is in
     * features[feature_id.id.value].
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.decision_trees.ModelAndFeatures.Feature&gt; features = 1;</code>
     */

    tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature getFeaturesOrDefault(
        java.lang.String key,
        tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature defaultValue);
    /**
     * <pre>
     * Given a FeatureId feature_id, the feature's description is in
     * features[feature_id.id.value].
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.decision_trees.ModelAndFeatures.Feature&gt; features = 1;</code>
     */

    tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature getFeaturesOrThrow(
        java.lang.String key);

    /**
     * <code>.tensorflow.decision_trees.Model model = 2;</code>
     */
    boolean hasModel();
    /**
     * <code>.tensorflow.decision_trees.Model model = 2;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.Model getModel();
    /**
     * <code>.tensorflow.decision_trees.Model model = 2;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.ModelOrBuilder getModelOrBuilder();

    /**
     * <code>repeated .google.protobuf.Any additional_data = 3;</code>
     */
    java.util.List<com.google.protobuf.Any> 
        getAdditionalDataList();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 3;</code>
     */
    com.google.protobuf.Any getAdditionalData(int index);
    /**
     * <code>repeated .google.protobuf.Any additional_data = 3;</code>
     */
    int getAdditionalDataCount();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 3;</code>
     */
    java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
        getAdditionalDataOrBuilderList();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 3;</code>
     */
    com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code tensorflow.decision_trees.ModelAndFeatures}
   */
  public  static final class ModelAndFeatures extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.decision_trees.ModelAndFeatures)
      ModelAndFeaturesOrBuilder {
    // Use ModelAndFeatures.newBuilder() to construct.
    private ModelAndFeatures(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ModelAndFeatures() {
      additionalData_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private ModelAndFeatures(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                features_ = com.google.protobuf.MapField.newMapField(
                    FeaturesDefaultEntryHolder.defaultEntry);
                mutable_bitField0_ |= 0x00000001;
              }
              com.google.protobuf.MapEntry<java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature>
              features__ = input.readMessage(
                  FeaturesDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
              features_.getMutableMap().put(
                  features__.getKey(), features__.getValue());
              break;
            }
            case 18: {
              tensorflow.decision_trees.GenericTreeModel.Model.Builder subBuilder = null;
              if (model_ != null) {
                subBuilder = model_.toBuilder();
              }
              model_ = input.readMessage(tensorflow.decision_trees.GenericTreeModel.Model.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(model_);
                model_ = subBuilder.buildPartial();
              }

              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>();
                mutable_bitField0_ |= 0x00000004;
              }
              additionalData_.add(
                  input.readMessage(com.google.protobuf.Any.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_ & 0x00000004) == 0x00000004)) {
          additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
        }
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_ModelAndFeatures_descriptor;
    }

    @SuppressWarnings({"rawtypes"})
    protected com.google.protobuf.MapField internalGetMapField(
        int number) {
      switch (number) {
        case 1:
          return internalGetFeatures();
        default:
          throw new RuntimeException(
              "Invalid map field number: " + number);
      }
    }
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_ModelAndFeatures_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.class, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Builder.class);
    }

    public interface FeatureOrBuilder extends
        // @@protoc_insertion_point(interface_extends:tensorflow.decision_trees.ModelAndFeatures.Feature)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * TODO(jonasz): Remove this field, as it's confusing. Ctx: cr/153569450.
       * </pre>
       *
       * <code>.tensorflow.decision_trees.FeatureId feature_id = 1 [deprecated = true];</code>
       */
      @java.lang.Deprecated boolean hasFeatureId();
      /**
       * <pre>
       * TODO(jonasz): Remove this field, as it's confusing. Ctx: cr/153569450.
       * </pre>
       *
       * <code>.tensorflow.decision_trees.FeatureId feature_id = 1 [deprecated = true];</code>
       */
      @java.lang.Deprecated tensorflow.decision_trees.GenericTreeModel.FeatureId getFeatureId();
      /**
       * <pre>
       * TODO(jonasz): Remove this field, as it's confusing. Ctx: cr/153569450.
       * </pre>
       *
       * <code>.tensorflow.decision_trees.FeatureId feature_id = 1 [deprecated = true];</code>
       */
      @java.lang.Deprecated tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder getFeatureIdOrBuilder();

      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      java.util.List<com.google.protobuf.Any> 
          getAdditionalDataList();
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      com.google.protobuf.Any getAdditionalData(int index);
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      int getAdditionalDataCount();
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
          getAdditionalDataOrBuilderList();
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
          int index);
    }
    /**
     * Protobuf type {@code tensorflow.decision_trees.ModelAndFeatures.Feature}
     */
    public  static final class Feature extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:tensorflow.decision_trees.ModelAndFeatures.Feature)
        FeatureOrBuilder {
      // Use Feature.newBuilder() to construct.
      private Feature(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private Feature() {
        additionalData_ = java.util.Collections.emptyList();
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
      }
      private Feature(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        int mutable_bitField0_ = 0;
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!input.skipField(tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder subBuilder = null;
                if (featureId_ != null) {
                  subBuilder = featureId_.toBuilder();
                }
                featureId_ = input.readMessage(tensorflow.decision_trees.GenericTreeModel.FeatureId.parser(), extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(featureId_);
                  featureId_ = subBuilder.buildPartial();
                }

                break;
              }
              case 18: {
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>();
                  mutable_bitField0_ |= 0x00000002;
                }
                additionalData_.add(
                    input.readMessage(com.google.protobuf.Any.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_ & 0x00000002) == 0x00000002)) {
            additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
          }
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_ModelAndFeatures_Feature_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_ModelAndFeatures_Feature_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature.class, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature.Builder.class);
      }

      private int bitField0_;
      public static final int FEATURE_ID_FIELD_NUMBER = 1;
      private tensorflow.decision_trees.GenericTreeModel.FeatureId featureId_;
      /**
       * <pre>
       * TODO(jonasz): Remove this field, as it's confusing. Ctx: cr/153569450.
       * </pre>
       *
       * <code>.tensorflow.decision_trees.FeatureId feature_id = 1 [deprecated = true];</code>
       */
      @java.lang.Deprecated public boolean hasFeatureId() {
        return featureId_ != null;
      }
      /**
       * <pre>
       * TODO(jonasz): Remove this field, as it's confusing. Ctx: cr/153569450.
       * </pre>
       *
       * <code>.tensorflow.decision_trees.FeatureId feature_id = 1 [deprecated = true];</code>
       */
      @java.lang.Deprecated public tensorflow.decision_trees.GenericTreeModel.FeatureId getFeatureId() {
        return featureId_ == null ? tensorflow.decision_trees.GenericTreeModel.FeatureId.getDefaultInstance() : featureId_;
      }
      /**
       * <pre>
       * TODO(jonasz): Remove this field, as it's confusing. Ctx: cr/153569450.
       * </pre>
       *
       * <code>.tensorflow.decision_trees.FeatureId feature_id = 1 [deprecated = true];</code>
       */
      @java.lang.Deprecated public tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder getFeatureIdOrBuilder() {
        return getFeatureId();
      }

      public static final int ADDITIONAL_DATA_FIELD_NUMBER = 2;
      private java.util.List<com.google.protobuf.Any> additionalData_;
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
        return additionalData_;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
          getAdditionalDataOrBuilderList() {
        return additionalData_;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public int getAdditionalDataCount() {
        return additionalData_.size();
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public com.google.protobuf.Any getAdditionalData(int index) {
        return additionalData_.get(index);
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
          int index) {
        return additionalData_.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 {
        if (featureId_ != null) {
          output.writeMessage(1, getFeatureId());
        }
        for (int i = 0; i < additionalData_.size(); i++) {
          output.writeMessage(2, additionalData_.get(i));
        }
      }

      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (featureId_ != null) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, getFeatureId());
        }
        for (int i = 0; i < additionalData_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(2, additionalData_.get(i));
        }
        memoizedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature)) {
          return super.equals(obj);
        }
        tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature other = (tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature) obj;

        boolean result = true;
        result = result && (hasFeatureId() == other.hasFeatureId());
        if (hasFeatureId()) {
          result = result && getFeatureId()
              .equals(other.getFeatureId());
        }
        result = result && getAdditionalDataList()
            .equals(other.getAdditionalDataList());
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (hasFeatureId()) {
          hash = (37 * hash) + FEATURE_ID_FIELD_NUMBER;
          hash = (53 * hash) + getFeatureId().hashCode();
        }
        if (getAdditionalDataCount() > 0) {
          hash = (37 * hash) + ADDITIONAL_DATA_FIELD_NUMBER;
          hash = (53 * hash) + getAdditionalDataList().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature 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 tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature 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 tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature 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(tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature 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;
      }
      /**
       * Protobuf type {@code tensorflow.decision_trees.ModelAndFeatures.Feature}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:tensorflow.decision_trees.ModelAndFeatures.Feature)
          tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.FeatureOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_ModelAndFeatures_Feature_descriptor;
        }

        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_ModelAndFeatures_Feature_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature.class, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature.Builder.class);
        }

        // Construct using tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
            getAdditionalDataFieldBuilder();
          }
        }
        public Builder clear() {
          super.clear();
          if (featureIdBuilder_ == null) {
            featureId_ = null;
          } else {
            featureId_ = null;
            featureIdBuilder_ = null;
          }
          if (additionalDataBuilder_ == null) {
            additionalData_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            additionalDataBuilder_.clear();
          }
          return this;
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_ModelAndFeatures_Feature_descriptor;
        }

        public tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature getDefaultInstanceForType() {
          return tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature.getDefaultInstance();
        }

        public tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature build() {
          tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature buildPartial() {
          tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature result = new tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (featureIdBuilder_ == null) {
            result.featureId_ = featureId_;
          } else {
            result.featureId_ = featureIdBuilder_.build();
          }
          if (additionalDataBuilder_ == null) {
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
              additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
              bitField0_ = (bitField0_ & ~0x00000002);
            }
            result.additionalData_ = additionalData_;
          } else {
            result.additionalData_ = additionalDataBuilder_.build();
          }
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder clone() {
          return (Builder) super.clone();
        }
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            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, Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature) {
            return mergeFrom((tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature other) {
          if (other == tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature.getDefaultInstance()) return this;
          if (other.hasFeatureId()) {
            mergeFeatureId(other.getFeatureId());
          }
          if (additionalDataBuilder_ == null) {
            if (!other.additionalData_.isEmpty()) {
              if (additionalData_.isEmpty()) {
                additionalData_ = other.additionalData_;
                bitField0_ = (bitField0_ & ~0x00000002);
              } else {
                ensureAdditionalDataIsMutable();
                additionalData_.addAll(other.additionalData_);
              }
              onChanged();
            }
          } else {
            if (!other.additionalData_.isEmpty()) {
              if (additionalDataBuilder_.isEmpty()) {
                additionalDataBuilder_.dispose();
                additionalDataBuilder_ = null;
                additionalData_ = other.additionalData_;
                bitField0_ = (bitField0_ & ~0x00000002);
                additionalDataBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getAdditionalDataFieldBuilder() : null;
              } else {
                additionalDataBuilder_.addAllMessages(other.additionalData_);
              }
            }
          }
          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 {
          tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private tensorflow.decision_trees.GenericTreeModel.FeatureId featureId_ = null;
        private com.google.protobuf.SingleFieldBuilderV3<
            tensorflow.decision_trees.GenericTreeModel.FeatureId, tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder, tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder> featureIdBuilder_;
        /**
         * <pre>
         * TODO(jonasz): Remove this field, as it's confusing. Ctx: cr/153569450.
         * </pre>
         *
         * <code>.tensorflow.decision_trees.FeatureId feature_id = 1 [deprecated = true];</code>
         */
        @java.lang.Deprecated public boolean hasFeatureId() {
          return featureIdBuilder_ != null || featureId_ != null;
        }
        /**
         * <pre>
         * TODO(jonasz): Remove this field, as it's confusing. Ctx: cr/153569450.
         * </pre>
         *
         * <code>.tensorflow.decision_trees.FeatureId feature_id = 1 [deprecated = true];</code>
         */
        @java.lang.Deprecated public tensorflow.decision_trees.GenericTreeModel.FeatureId getFeatureId() {
          if (featureIdBuilder_ == null) {
            return featureId_ == null ? tensorflow.decision_trees.GenericTreeModel.FeatureId.getDefaultInstance() : featureId_;
          } else {
            return featureIdBuilder_.getMessage();
          }
        }
        /**
         * <pre>
         * TODO(jonasz): Remove this field, as it's confusing. Ctx: cr/153569450.
         * </pre>
         *
         * <code>.tensorflow.decision_trees.FeatureId feature_id = 1 [deprecated = true];</code>
         */
        @java.lang.Deprecated public Builder setFeatureId(tensorflow.decision_trees.GenericTreeModel.FeatureId value) {
          if (featureIdBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            featureId_ = value;
            onChanged();
          } else {
            featureIdBuilder_.setMessage(value);
          }

          return this;
        }
        /**
         * <pre>
         * TODO(jonasz): Remove this field, as it's confusing. Ctx: cr/153569450.
         * </pre>
         *
         * <code>.tensorflow.decision_trees.FeatureId feature_id = 1 [deprecated = true];</code>
         */
        @java.lang.Deprecated public Builder setFeatureId(
            tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder builderForValue) {
          if (featureIdBuilder_ == null) {
            featureId_ = builderForValue.build();
            onChanged();
          } else {
            featureIdBuilder_.setMessage(builderForValue.build());
          }

          return this;
        }
        /**
         * <pre>
         * TODO(jonasz): Remove this field, as it's confusing. Ctx: cr/153569450.
         * </pre>
         *
         * <code>.tensorflow.decision_trees.FeatureId feature_id = 1 [deprecated = true];</code>
         */
        @java.lang.Deprecated public Builder mergeFeatureId(tensorflow.decision_trees.GenericTreeModel.FeatureId value) {
          if (featureIdBuilder_ == null) {
            if (featureId_ != null) {
              featureId_ =
                tensorflow.decision_trees.GenericTreeModel.FeatureId.newBuilder(featureId_).mergeFrom(value).buildPartial();
            } else {
              featureId_ = value;
            }
            onChanged();
          } else {
            featureIdBuilder_.mergeFrom(value);
          }

          return this;
        }
        /**
         * <pre>
         * TODO(jonasz): Remove this field, as it's confusing. Ctx: cr/153569450.
         * </pre>
         *
         * <code>.tensorflow.decision_trees.FeatureId feature_id = 1 [deprecated = true];</code>
         */
        @java.lang.Deprecated public Builder clearFeatureId() {
          if (featureIdBuilder_ == null) {
            featureId_ = null;
            onChanged();
          } else {
            featureId_ = null;
            featureIdBuilder_ = null;
          }

          return this;
        }
        /**
         * <pre>
         * TODO(jonasz): Remove this field, as it's confusing. Ctx: cr/153569450.
         * </pre>
         *
         * <code>.tensorflow.decision_trees.FeatureId feature_id = 1 [deprecated = true];</code>
         */
        @java.lang.Deprecated public tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder getFeatureIdBuilder() {
          
          onChanged();
          return getFeatureIdFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * TODO(jonasz): Remove this field, as it's confusing. Ctx: cr/153569450.
         * </pre>
         *
         * <code>.tensorflow.decision_trees.FeatureId feature_id = 1 [deprecated = true];</code>
         */
        @java.lang.Deprecated public tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder getFeatureIdOrBuilder() {
          if (featureIdBuilder_ != null) {
            return featureIdBuilder_.getMessageOrBuilder();
          } else {
            return featureId_ == null ?
                tensorflow.decision_trees.GenericTreeModel.FeatureId.getDefaultInstance() : featureId_;
          }
        }
        /**
         * <pre>
         * TODO(jonasz): Remove this field, as it's confusing. Ctx: cr/153569450.
         * </pre>
         *
         * <code>.tensorflow.decision_trees.FeatureId feature_id = 1 [deprecated = true];</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            tensorflow.decision_trees.GenericTreeModel.FeatureId, tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder, tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder> 
            getFeatureIdFieldBuilder() {
          if (featureIdBuilder_ == null) {
            featureIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                tensorflow.decision_trees.GenericTreeModel.FeatureId, tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder, tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder>(
                    getFeatureId(),
                    getParentForChildren(),
                    isClean());
            featureId_ = null;
          }
          return featureIdBuilder_;
        }

        private java.util.List<com.google.protobuf.Any> additionalData_ =
          java.util.Collections.emptyList();
        private void ensureAdditionalDataIsMutable() {
          if (!((bitField0_ & 0x00000002) == 0x00000002)) {
            additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>(additionalData_);
            bitField0_ |= 0x00000002;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> additionalDataBuilder_;

        /**
         * <code>repeated .google.protobuf.Any additional_data = 2;</code>
         */
        public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
          if (additionalDataBuilder_ == null) {
            return java.util.Collections.unmodifiableList(additionalData_);
          } else {
            return additionalDataBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 2;</code>
         */
        public int getAdditionalDataCount() {
          if (additionalDataBuilder_ == null) {
            return additionalData_.size();
          } else {
            return additionalDataBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 2;</code>
         */
        public com.google.protobuf.Any getAdditionalData(int index) {
          if (additionalDataBuilder_ == null) {
            return additionalData_.get(index);
          } else {
            return additionalDataBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 2;</code>
         */
        public Builder setAdditionalData(
            int index, com.google.protobuf.Any value) {
          if (additionalDataBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureAdditionalDataIsMutable();
            additionalData_.set(index, value);
            onChanged();
          } else {
            additionalDataBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 2;</code>
         */
        public Builder setAdditionalData(
            int index, com.google.protobuf.Any.Builder builderForValue) {
          if (additionalDataBuilder_ == null) {
            ensureAdditionalDataIsMutable();
            additionalData_.set(index, builderForValue.build());
            onChanged();
          } else {
            additionalDataBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 2;</code>
         */
        public Builder addAdditionalData(com.google.protobuf.Any value) {
          if (additionalDataBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureAdditionalDataIsMutable();
            additionalData_.add(value);
            onChanged();
          } else {
            additionalDataBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 2;</code>
         */
        public Builder addAdditionalData(
            int index, com.google.protobuf.Any value) {
          if (additionalDataBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureAdditionalDataIsMutable();
            additionalData_.add(index, value);
            onChanged();
          } else {
            additionalDataBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 2;</code>
         */
        public Builder addAdditionalData(
            com.google.protobuf.Any.Builder builderForValue) {
          if (additionalDataBuilder_ == null) {
            ensureAdditionalDataIsMutable();
            additionalData_.add(builderForValue.build());
            onChanged();
          } else {
            additionalDataBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 2;</code>
         */
        public Builder addAdditionalData(
            int index, com.google.protobuf.Any.Builder builderForValue) {
          if (additionalDataBuilder_ == null) {
            ensureAdditionalDataIsMutable();
            additionalData_.add(index, builderForValue.build());
            onChanged();
          } else {
            additionalDataBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 2;</code>
         */
        public Builder addAllAdditionalData(
            java.lang.Iterable<? extends com.google.protobuf.Any> values) {
          if (additionalDataBuilder_ == null) {
            ensureAdditionalDataIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, additionalData_);
            onChanged();
          } else {
            additionalDataBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 2;</code>
         */
        public Builder clearAdditionalData() {
          if (additionalDataBuilder_ == null) {
            additionalData_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
            onChanged();
          } else {
            additionalDataBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 2;</code>
         */
        public Builder removeAdditionalData(int index) {
          if (additionalDataBuilder_ == null) {
            ensureAdditionalDataIsMutable();
            additionalData_.remove(index);
            onChanged();
          } else {
            additionalDataBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 2;</code>
         */
        public com.google.protobuf.Any.Builder getAdditionalDataBuilder(
            int index) {
          return getAdditionalDataFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 2;</code>
         */
        public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
            int index) {
          if (additionalDataBuilder_ == null) {
            return additionalData_.get(index);  } else {
            return additionalDataBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 2;</code>
         */
        public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
             getAdditionalDataOrBuilderList() {
          if (additionalDataBuilder_ != null) {
            return additionalDataBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(additionalData_);
          }
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 2;</code>
         */
        public com.google.protobuf.Any.Builder addAdditionalDataBuilder() {
          return getAdditionalDataFieldBuilder().addBuilder(
              com.google.protobuf.Any.getDefaultInstance());
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 2;</code>
         */
        public com.google.protobuf.Any.Builder addAdditionalDataBuilder(
            int index) {
          return getAdditionalDataFieldBuilder().addBuilder(
              index, com.google.protobuf.Any.getDefaultInstance());
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 2;</code>
         */
        public java.util.List<com.google.protobuf.Any.Builder> 
             getAdditionalDataBuilderList() {
          return getAdditionalDataFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> 
            getAdditionalDataFieldBuilder() {
          if (additionalDataBuilder_ == null) {
            additionalDataBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder>(
                    additionalData_,
                    ((bitField0_ & 0x00000002) == 0x00000002),
                    getParentForChildren(),
                    isClean());
            additionalData_ = null;
          }
          return additionalDataBuilder_;
        }
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return this;
        }

        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return this;
        }


        // @@protoc_insertion_point(builder_scope:tensorflow.decision_trees.ModelAndFeatures.Feature)
      }

      // @@protoc_insertion_point(class_scope:tensorflow.decision_trees.ModelAndFeatures.Feature)
      private static final tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature();
      }

      public static tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

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

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

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

      public tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int FEATURES_FIELD_NUMBER = 1;
    private static final class FeaturesDefaultEntryHolder {
      static final com.google.protobuf.MapEntry<
          java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature> defaultEntry =
              com.google.protobuf.MapEntry
              .<java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature>newDefaultInstance(
                  tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_ModelAndFeatures_FeaturesEntry_descriptor, 
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "",
                  com.google.protobuf.WireFormat.FieldType.MESSAGE,
                  tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature.getDefaultInstance());
    }
    private com.google.protobuf.MapField<
        java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature> features_;
    private com.google.protobuf.MapField<java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature>
    internalGetFeatures() {
      if (features_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            FeaturesDefaultEntryHolder.defaultEntry);
      }
      return features_;
    }

    public int getFeaturesCount() {
      return internalGetFeatures().getMap().size();
    }
    /**
     * <pre>
     * Given a FeatureId feature_id, the feature's description is in
     * features[feature_id.id.value].
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.decision_trees.ModelAndFeatures.Feature&gt; features = 1;</code>
     */

    public boolean containsFeatures(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      return internalGetFeatures().getMap().containsKey(key);
    }
    /**
     * Use {@link #getFeaturesMap()} instead.
     */
    @java.lang.Deprecated
    public java.util.Map<java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature> getFeatures() {
      return getFeaturesMap();
    }
    /**
     * <pre>
     * Given a FeatureId feature_id, the feature's description is in
     * features[feature_id.id.value].
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.decision_trees.ModelAndFeatures.Feature&gt; features = 1;</code>
     */

    public java.util.Map<java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature> getFeaturesMap() {
      return internalGetFeatures().getMap();
    }
    /**
     * <pre>
     * Given a FeatureId feature_id, the feature's description is in
     * features[feature_id.id.value].
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.decision_trees.ModelAndFeatures.Feature&gt; features = 1;</code>
     */

    public tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature getFeaturesOrDefault(
        java.lang.String key,
        tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature defaultValue) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature> map =
          internalGetFeatures().getMap();
      return map.containsKey(key) ? map.get(key) : defaultValue;
    }
    /**
     * <pre>
     * Given a FeatureId feature_id, the feature's description is in
     * features[feature_id.id.value].
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.decision_trees.ModelAndFeatures.Feature&gt; features = 1;</code>
     */

    public tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature getFeaturesOrThrow(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature> map =
          internalGetFeatures().getMap();
      if (!map.containsKey(key)) {
        throw new java.lang.IllegalArgumentException();
      }
      return map.get(key);
    }

    public static final int MODEL_FIELD_NUMBER = 2;
    private tensorflow.decision_trees.GenericTreeModel.Model model_;
    /**
     * <code>.tensorflow.decision_trees.Model model = 2;</code>
     */
    public boolean hasModel() {
      return model_ != null;
    }
    /**
     * <code>.tensorflow.decision_trees.Model model = 2;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.Model getModel() {
      return model_ == null ? tensorflow.decision_trees.GenericTreeModel.Model.getDefaultInstance() : model_;
    }
    /**
     * <code>.tensorflow.decision_trees.Model model = 2;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.ModelOrBuilder getModelOrBuilder() {
      return getModel();
    }

    public static final int ADDITIONAL_DATA_FIELD_NUMBER = 3;
    private java.util.List<com.google.protobuf.Any> additionalData_;
    /**
     * <code>repeated .google.protobuf.Any additional_data = 3;</code>
     */
    public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
      return additionalData_;
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 3;</code>
     */
    public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
        getAdditionalDataOrBuilderList() {
      return additionalData_;
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 3;</code>
     */
    public int getAdditionalDataCount() {
      return additionalData_.size();
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 3;</code>
     */
    public com.google.protobuf.Any getAdditionalData(int index) {
      return additionalData_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 3;</code>
     */
    public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
        int index) {
      return additionalData_.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 {
      com.google.protobuf.GeneratedMessageV3
        .serializeStringMapTo(
          output,
          internalGetFeatures(),
          FeaturesDefaultEntryHolder.defaultEntry,
          1);
      if (model_ != null) {
        output.writeMessage(2, getModel());
      }
      for (int i = 0; i < additionalData_.size(); i++) {
        output.writeMessage(3, additionalData_.get(i));
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (java.util.Map.Entry<java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature> entry
           : internalGetFeatures().getMap().entrySet()) {
        com.google.protobuf.MapEntry<java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature>
        features__ = FeaturesDefaultEntryHolder.defaultEntry.newBuilderForType()
            .setKey(entry.getKey())
            .setValue(entry.getValue())
            .build();
        size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, features__);
      }
      if (model_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getModel());
      }
      for (int i = 0; i < additionalData_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, additionalData_.get(i));
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures)) {
        return super.equals(obj);
      }
      tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures other = (tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures) obj;

      boolean result = true;
      result = result && internalGetFeatures().equals(
          other.internalGetFeatures());
      result = result && (hasModel() == other.hasModel());
      if (hasModel()) {
        result = result && getModel()
            .equals(other.getModel());
      }
      result = result && getAdditionalDataList()
          .equals(other.getAdditionalDataList());
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (!internalGetFeatures().getMap().isEmpty()) {
        hash = (37 * hash) + FEATURES_FIELD_NUMBER;
        hash = (53 * hash) + internalGetFeatures().hashCode();
      }
      if (hasModel()) {
        hash = (37 * hash) + MODEL_FIELD_NUMBER;
        hash = (53 * hash) + getModel().hashCode();
      }
      if (getAdditionalDataCount() > 0) {
        hash = (37 * hash) + ADDITIONAL_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getAdditionalDataList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures 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 tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures 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 tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures 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(tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures 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;
    }
    /**
     * Protobuf type {@code tensorflow.decision_trees.ModelAndFeatures}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.decision_trees.ModelAndFeatures)
        tensorflow.decision_trees.GenericTreeModel.ModelAndFeaturesOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_ModelAndFeatures_descriptor;
      }

      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMapField(
          int number) {
        switch (number) {
          case 1:
            return internalGetFeatures();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMutableMapField(
          int number) {
        switch (number) {
          case 1:
            return internalGetMutableFeatures();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_ModelAndFeatures_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.class, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Builder.class);
      }

      // Construct using tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getAdditionalDataFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        internalGetMutableFeatures().clear();
        if (modelBuilder_ == null) {
          model_ = null;
        } else {
          model_ = null;
          modelBuilder_ = null;
        }
        if (additionalDataBuilder_ == null) {
          additionalData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          additionalDataBuilder_.clear();
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_ModelAndFeatures_descriptor;
      }

      public tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures getDefaultInstanceForType() {
        return tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.getDefaultInstance();
      }

      public tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures build() {
        tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures buildPartial() {
        tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures result = new tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        result.features_ = internalGetFeatures();
        result.features_.makeImmutable();
        if (modelBuilder_ == null) {
          result.model_ = model_;
        } else {
          result.model_ = modelBuilder_.build();
        }
        if (additionalDataBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.additionalData_ = additionalData_;
        } else {
          result.additionalData_ = additionalDataBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          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, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures) {
          return mergeFrom((tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures other) {
        if (other == tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.getDefaultInstance()) return this;
        internalGetMutableFeatures().mergeFrom(
            other.internalGetFeatures());
        if (other.hasModel()) {
          mergeModel(other.getModel());
        }
        if (additionalDataBuilder_ == null) {
          if (!other.additionalData_.isEmpty()) {
            if (additionalData_.isEmpty()) {
              additionalData_ = other.additionalData_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureAdditionalDataIsMutable();
              additionalData_.addAll(other.additionalData_);
            }
            onChanged();
          }
        } else {
          if (!other.additionalData_.isEmpty()) {
            if (additionalDataBuilder_.isEmpty()) {
              additionalDataBuilder_.dispose();
              additionalDataBuilder_ = null;
              additionalData_ = other.additionalData_;
              bitField0_ = (bitField0_ & ~0x00000004);
              additionalDataBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getAdditionalDataFieldBuilder() : null;
            } else {
              additionalDataBuilder_.addAllMessages(other.additionalData_);
            }
          }
        }
        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 {
        tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.protobuf.MapField<
          java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature> features_;
      private com.google.protobuf.MapField<java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature>
      internalGetFeatures() {
        if (features_ == null) {
          return com.google.protobuf.MapField.emptyMapField(
              FeaturesDefaultEntryHolder.defaultEntry);
        }
        return features_;
      }
      private com.google.protobuf.MapField<java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature>
      internalGetMutableFeatures() {
        onChanged();;
        if (features_ == null) {
          features_ = com.google.protobuf.MapField.newMapField(
              FeaturesDefaultEntryHolder.defaultEntry);
        }
        if (!features_.isMutable()) {
          features_ = features_.copy();
        }
        return features_;
      }

      public int getFeaturesCount() {
        return internalGetFeatures().getMap().size();
      }
      /**
       * <pre>
       * Given a FeatureId feature_id, the feature's description is in
       * features[feature_id.id.value].
       * </pre>
       *
       * <code>map&lt;string, .tensorflow.decision_trees.ModelAndFeatures.Feature&gt; features = 1;</code>
       */

      public boolean containsFeatures(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        return internalGetFeatures().getMap().containsKey(key);
      }
      /**
       * Use {@link #getFeaturesMap()} instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature> getFeatures() {
        return getFeaturesMap();
      }
      /**
       * <pre>
       * Given a FeatureId feature_id, the feature's description is in
       * features[feature_id.id.value].
       * </pre>
       *
       * <code>map&lt;string, .tensorflow.decision_trees.ModelAndFeatures.Feature&gt; features = 1;</code>
       */

      public java.util.Map<java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature> getFeaturesMap() {
        return internalGetFeatures().getMap();
      }
      /**
       * <pre>
       * Given a FeatureId feature_id, the feature's description is in
       * features[feature_id.id.value].
       * </pre>
       *
       * <code>map&lt;string, .tensorflow.decision_trees.ModelAndFeatures.Feature&gt; features = 1;</code>
       */

      public tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature getFeaturesOrDefault(
          java.lang.String key,
          tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature defaultValue) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature> map =
            internalGetFeatures().getMap();
        return map.containsKey(key) ? map.get(key) : defaultValue;
      }
      /**
       * <pre>
       * Given a FeatureId feature_id, the feature's description is in
       * features[feature_id.id.value].
       * </pre>
       *
       * <code>map&lt;string, .tensorflow.decision_trees.ModelAndFeatures.Feature&gt; features = 1;</code>
       */

      public tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature getFeaturesOrThrow(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature> map =
            internalGetFeatures().getMap();
        if (!map.containsKey(key)) {
          throw new java.lang.IllegalArgumentException();
        }
        return map.get(key);
      }

      public Builder clearFeatures() {
        internalGetMutableFeatures().getMutableMap()
            .clear();
        return this;
      }
      /**
       * <pre>
       * Given a FeatureId feature_id, the feature's description is in
       * features[feature_id.id.value].
       * </pre>
       *
       * <code>map&lt;string, .tensorflow.decision_trees.ModelAndFeatures.Feature&gt; features = 1;</code>
       */

      public Builder removeFeatures(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableFeatures().getMutableMap()
            .remove(key);
        return this;
      }
      /**
       * Use alternate mutation accessors instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature>
      getMutableFeatures() {
        return internalGetMutableFeatures().getMutableMap();
      }
      /**
       * <pre>
       * Given a FeatureId feature_id, the feature's description is in
       * features[feature_id.id.value].
       * </pre>
       *
       * <code>map&lt;string, .tensorflow.decision_trees.ModelAndFeatures.Feature&gt; features = 1;</code>
       */
      public Builder putFeatures(
          java.lang.String key,
          tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature value) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        if (value == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableFeatures().getMutableMap()
            .put(key, value);
        return this;
      }
      /**
       * <pre>
       * Given a FeatureId feature_id, the feature's description is in
       * features[feature_id.id.value].
       * </pre>
       *
       * <code>map&lt;string, .tensorflow.decision_trees.ModelAndFeatures.Feature&gt; features = 1;</code>
       */

      public Builder putAllFeatures(
          java.util.Map<java.lang.String, tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures.Feature> values) {
        internalGetMutableFeatures().getMutableMap()
            .putAll(values);
        return this;
      }

      private tensorflow.decision_trees.GenericTreeModel.Model model_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.Model, tensorflow.decision_trees.GenericTreeModel.Model.Builder, tensorflow.decision_trees.GenericTreeModel.ModelOrBuilder> modelBuilder_;
      /**
       * <code>.tensorflow.decision_trees.Model model = 2;</code>
       */
      public boolean hasModel() {
        return modelBuilder_ != null || model_ != null;
      }
      /**
       * <code>.tensorflow.decision_trees.Model model = 2;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Model getModel() {
        if (modelBuilder_ == null) {
          return model_ == null ? tensorflow.decision_trees.GenericTreeModel.Model.getDefaultInstance() : model_;
        } else {
          return modelBuilder_.getMessage();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.Model model = 2;</code>
       */
      public Builder setModel(tensorflow.decision_trees.GenericTreeModel.Model value) {
        if (modelBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          model_ = value;
          onChanged();
        } else {
          modelBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Model model = 2;</code>
       */
      public Builder setModel(
          tensorflow.decision_trees.GenericTreeModel.Model.Builder builderForValue) {
        if (modelBuilder_ == null) {
          model_ = builderForValue.build();
          onChanged();
        } else {
          modelBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Model model = 2;</code>
       */
      public Builder mergeModel(tensorflow.decision_trees.GenericTreeModel.Model value) {
        if (modelBuilder_ == null) {
          if (model_ != null) {
            model_ =
              tensorflow.decision_trees.GenericTreeModel.Model.newBuilder(model_).mergeFrom(value).buildPartial();
          } else {
            model_ = value;
          }
          onChanged();
        } else {
          modelBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Model model = 2;</code>
       */
      public Builder clearModel() {
        if (modelBuilder_ == null) {
          model_ = null;
          onChanged();
        } else {
          model_ = null;
          modelBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Model model = 2;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Model.Builder getModelBuilder() {
        
        onChanged();
        return getModelFieldBuilder().getBuilder();
      }
      /**
       * <code>.tensorflow.decision_trees.Model model = 2;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.ModelOrBuilder getModelOrBuilder() {
        if (modelBuilder_ != null) {
          return modelBuilder_.getMessageOrBuilder();
        } else {
          return model_ == null ?
              tensorflow.decision_trees.GenericTreeModel.Model.getDefaultInstance() : model_;
        }
      }
      /**
       * <code>.tensorflow.decision_trees.Model model = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.Model, tensorflow.decision_trees.GenericTreeModel.Model.Builder, tensorflow.decision_trees.GenericTreeModel.ModelOrBuilder> 
          getModelFieldBuilder() {
        if (modelBuilder_ == null) {
          modelBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              tensorflow.decision_trees.GenericTreeModel.Model, tensorflow.decision_trees.GenericTreeModel.Model.Builder, tensorflow.decision_trees.GenericTreeModel.ModelOrBuilder>(
                  getModel(),
                  getParentForChildren(),
                  isClean());
          model_ = null;
        }
        return modelBuilder_;
      }

      private java.util.List<com.google.protobuf.Any> additionalData_ =
        java.util.Collections.emptyList();
      private void ensureAdditionalDataIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>(additionalData_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> additionalDataBuilder_;

      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
        if (additionalDataBuilder_ == null) {
          return java.util.Collections.unmodifiableList(additionalData_);
        } else {
          return additionalDataBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public int getAdditionalDataCount() {
        if (additionalDataBuilder_ == null) {
          return additionalData_.size();
        } else {
          return additionalDataBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public com.google.protobuf.Any getAdditionalData(int index) {
        if (additionalDataBuilder_ == null) {
          return additionalData_.get(index);
        } else {
          return additionalDataBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public Builder setAdditionalData(
          int index, com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.set(index, value);
          onChanged();
        } else {
          additionalDataBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public Builder setAdditionalData(
          int index, com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.set(index, builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public Builder addAdditionalData(com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.add(value);
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public Builder addAdditionalData(
          int index, com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.add(index, value);
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public Builder addAdditionalData(
          com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.add(builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public Builder addAdditionalData(
          int index, com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.add(index, builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public Builder addAllAdditionalData(
          java.lang.Iterable<? extends com.google.protobuf.Any> values) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, additionalData_);
          onChanged();
        } else {
          additionalDataBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public Builder clearAdditionalData() {
        if (additionalDataBuilder_ == null) {
          additionalData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          additionalDataBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public Builder removeAdditionalData(int index) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.remove(index);
          onChanged();
        } else {
          additionalDataBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public com.google.protobuf.Any.Builder getAdditionalDataBuilder(
          int index) {
        return getAdditionalDataFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
          int index) {
        if (additionalDataBuilder_ == null) {
          return additionalData_.get(index);  } else {
          return additionalDataBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
           getAdditionalDataOrBuilderList() {
        if (additionalDataBuilder_ != null) {
          return additionalDataBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(additionalData_);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public com.google.protobuf.Any.Builder addAdditionalDataBuilder() {
        return getAdditionalDataFieldBuilder().addBuilder(
            com.google.protobuf.Any.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public com.google.protobuf.Any.Builder addAdditionalDataBuilder(
          int index) {
        return getAdditionalDataFieldBuilder().addBuilder(
            index, com.google.protobuf.Any.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public java.util.List<com.google.protobuf.Any.Builder> 
           getAdditionalDataBuilderList() {
        return getAdditionalDataFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> 
          getAdditionalDataFieldBuilder() {
        if (additionalDataBuilder_ == null) {
          additionalDataBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder>(
                  additionalData_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          additionalData_ = null;
        }
        return additionalDataBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.decision_trees.ModelAndFeatures)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.decision_trees.ModelAndFeatures)
    private static final tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures();
    }

    public static tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public tensorflow.decision_trees.GenericTreeModel.ModelAndFeatures getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface EnsembleOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.decision_trees.Ensemble)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * A higher id for more readable printing.
     * </pre>
     *
     * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
     */
    java.util.List<tensorflow.decision_trees.GenericTreeModel.Ensemble.Member> 
        getMembersList();
    /**
     * <pre>
     * A higher id for more readable printing.
     * </pre>
     *
     * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.Ensemble.Member getMembers(int index);
    /**
     * <pre>
     * A higher id for more readable printing.
     * </pre>
     *
     * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
     */
    int getMembersCount();
    /**
     * <pre>
     * A higher id for more readable printing.
     * </pre>
     *
     * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
     */
    java.util.List<? extends tensorflow.decision_trees.GenericTreeModel.Ensemble.MemberOrBuilder> 
        getMembersOrBuilderList();
    /**
     * <pre>
     * A higher id for more readable printing.
     * </pre>
     *
     * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.Ensemble.MemberOrBuilder getMembersOrBuilder(
        int index);

    /**
     * <code>.tensorflow.decision_trees.Summation summation_combination_technique = 1;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.Summation getSummationCombinationTechnique();
    /**
     * <code>.tensorflow.decision_trees.Summation summation_combination_technique = 1;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.SummationOrBuilder getSummationCombinationTechniqueOrBuilder();

    /**
     * <code>.tensorflow.decision_trees.Averaging averaging_combination_technique = 2;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.Averaging getAveragingCombinationTechnique();
    /**
     * <code>.tensorflow.decision_trees.Averaging averaging_combination_technique = 2;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.AveragingOrBuilder getAveragingCombinationTechniqueOrBuilder();

    /**
     * <code>.google.protobuf.Any custom_combination_technique = 3;</code>
     */
    com.google.protobuf.Any getCustomCombinationTechnique();
    /**
     * <code>.google.protobuf.Any custom_combination_technique = 3;</code>
     */
    com.google.protobuf.AnyOrBuilder getCustomCombinationTechniqueOrBuilder();

    /**
     * <code>repeated .google.protobuf.Any additional_data = 4;</code>
     */
    java.util.List<com.google.protobuf.Any> 
        getAdditionalDataList();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 4;</code>
     */
    com.google.protobuf.Any getAdditionalData(int index);
    /**
     * <code>repeated .google.protobuf.Any additional_data = 4;</code>
     */
    int getAdditionalDataCount();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 4;</code>
     */
    java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
        getAdditionalDataOrBuilderList();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 4;</code>
     */
    com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
        int index);

    public tensorflow.decision_trees.GenericTreeModel.Ensemble.CombinationTechniqueCase getCombinationTechniqueCase();
  }
  /**
   * <pre>
   * An ordered sequence of models. This message can be used to express bagged or
   * boosted models, as well as custom ensembles.
   * </pre>
   *
   * Protobuf type {@code tensorflow.decision_trees.Ensemble}
   */
  public  static final class Ensemble extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.decision_trees.Ensemble)
      EnsembleOrBuilder {
    // Use Ensemble.newBuilder() to construct.
    private Ensemble(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Ensemble() {
      members_ = java.util.Collections.emptyList();
      additionalData_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private Ensemble(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              tensorflow.decision_trees.GenericTreeModel.Summation.Builder subBuilder = null;
              if (combinationTechniqueCase_ == 1) {
                subBuilder = ((tensorflow.decision_trees.GenericTreeModel.Summation) combinationTechnique_).toBuilder();
              }
              combinationTechnique_ =
                  input.readMessage(tensorflow.decision_trees.GenericTreeModel.Summation.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((tensorflow.decision_trees.GenericTreeModel.Summation) combinationTechnique_);
                combinationTechnique_ = subBuilder.buildPartial();
              }
              combinationTechniqueCase_ = 1;
              break;
            }
            case 18: {
              tensorflow.decision_trees.GenericTreeModel.Averaging.Builder subBuilder = null;
              if (combinationTechniqueCase_ == 2) {
                subBuilder = ((tensorflow.decision_trees.GenericTreeModel.Averaging) combinationTechnique_).toBuilder();
              }
              combinationTechnique_ =
                  input.readMessage(tensorflow.decision_trees.GenericTreeModel.Averaging.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((tensorflow.decision_trees.GenericTreeModel.Averaging) combinationTechnique_);
                combinationTechnique_ = subBuilder.buildPartial();
              }
              combinationTechniqueCase_ = 2;
              break;
            }
            case 26: {
              com.google.protobuf.Any.Builder subBuilder = null;
              if (combinationTechniqueCase_ == 3) {
                subBuilder = ((com.google.protobuf.Any) combinationTechnique_).toBuilder();
              }
              combinationTechnique_ =
                  input.readMessage(com.google.protobuf.Any.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((com.google.protobuf.Any) combinationTechnique_);
                combinationTechnique_ = subBuilder.buildPartial();
              }
              combinationTechniqueCase_ = 3;
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>();
                mutable_bitField0_ |= 0x00000010;
              }
              additionalData_.add(
                  input.readMessage(com.google.protobuf.Any.parser(), extensionRegistry));
              break;
            }
            case 802: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                members_ = new java.util.ArrayList<tensorflow.decision_trees.GenericTreeModel.Ensemble.Member>();
                mutable_bitField0_ |= 0x00000001;
              }
              members_.add(
                  input.readMessage(tensorflow.decision_trees.GenericTreeModel.Ensemble.Member.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_ & 0x00000010) == 0x00000010)) {
          additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
        }
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          members_ = java.util.Collections.unmodifiableList(members_);
        }
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Ensemble_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Ensemble_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.decision_trees.GenericTreeModel.Ensemble.class, tensorflow.decision_trees.GenericTreeModel.Ensemble.Builder.class);
    }

    public interface MemberOrBuilder extends
        // @@protoc_insertion_point(interface_extends:tensorflow.decision_trees.Ensemble.Member)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <code>.tensorflow.decision_trees.Model submodel = 1;</code>
       */
      boolean hasSubmodel();
      /**
       * <code>.tensorflow.decision_trees.Model submodel = 1;</code>
       */
      tensorflow.decision_trees.GenericTreeModel.Model getSubmodel();
      /**
       * <code>.tensorflow.decision_trees.Model submodel = 1;</code>
       */
      tensorflow.decision_trees.GenericTreeModel.ModelOrBuilder getSubmodelOrBuilder();

      /**
       * <code>.google.protobuf.Int32Value submodel_id = 2;</code>
       */
      boolean hasSubmodelId();
      /**
       * <code>.google.protobuf.Int32Value submodel_id = 2;</code>
       */
      com.google.protobuf.Int32Value getSubmodelId();
      /**
       * <code>.google.protobuf.Int32Value submodel_id = 2;</code>
       */
      com.google.protobuf.Int32ValueOrBuilder getSubmodelIdOrBuilder();

      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      java.util.List<com.google.protobuf.Any> 
          getAdditionalDataList();
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      com.google.protobuf.Any getAdditionalData(int index);
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      int getAdditionalDataCount();
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
          getAdditionalDataOrBuilderList();
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
          int index);
    }
    /**
     * Protobuf type {@code tensorflow.decision_trees.Ensemble.Member}
     */
    public  static final class Member extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:tensorflow.decision_trees.Ensemble.Member)
        MemberOrBuilder {
      // Use Member.newBuilder() to construct.
      private Member(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private Member() {
        additionalData_ = java.util.Collections.emptyList();
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
      }
      private Member(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        int mutable_bitField0_ = 0;
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!input.skipField(tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                tensorflow.decision_trees.GenericTreeModel.Model.Builder subBuilder = null;
                if (submodel_ != null) {
                  subBuilder = submodel_.toBuilder();
                }
                submodel_ = input.readMessage(tensorflow.decision_trees.GenericTreeModel.Model.parser(), extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(submodel_);
                  submodel_ = subBuilder.buildPartial();
                }

                break;
              }
              case 18: {
                com.google.protobuf.Int32Value.Builder subBuilder = null;
                if (submodelId_ != null) {
                  subBuilder = submodelId_.toBuilder();
                }
                submodelId_ = input.readMessage(com.google.protobuf.Int32Value.parser(), extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(submodelId_);
                  submodelId_ = subBuilder.buildPartial();
                }

                break;
              }
              case 26: {
                if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                  additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>();
                  mutable_bitField0_ |= 0x00000004;
                }
                additionalData_.add(
                    input.readMessage(com.google.protobuf.Any.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_ & 0x00000004) == 0x00000004)) {
            additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
          }
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Ensemble_Member_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Ensemble_Member_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.decision_trees.GenericTreeModel.Ensemble.Member.class, tensorflow.decision_trees.GenericTreeModel.Ensemble.Member.Builder.class);
      }

      private int bitField0_;
      public static final int SUBMODEL_FIELD_NUMBER = 1;
      private tensorflow.decision_trees.GenericTreeModel.Model submodel_;
      /**
       * <code>.tensorflow.decision_trees.Model submodel = 1;</code>
       */
      public boolean hasSubmodel() {
        return submodel_ != null;
      }
      /**
       * <code>.tensorflow.decision_trees.Model submodel = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Model getSubmodel() {
        return submodel_ == null ? tensorflow.decision_trees.GenericTreeModel.Model.getDefaultInstance() : submodel_;
      }
      /**
       * <code>.tensorflow.decision_trees.Model submodel = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.ModelOrBuilder getSubmodelOrBuilder() {
        return getSubmodel();
      }

      public static final int SUBMODEL_ID_FIELD_NUMBER = 2;
      private com.google.protobuf.Int32Value submodelId_;
      /**
       * <code>.google.protobuf.Int32Value submodel_id = 2;</code>
       */
      public boolean hasSubmodelId() {
        return submodelId_ != null;
      }
      /**
       * <code>.google.protobuf.Int32Value submodel_id = 2;</code>
       */
      public com.google.protobuf.Int32Value getSubmodelId() {
        return submodelId_ == null ? com.google.protobuf.Int32Value.getDefaultInstance() : submodelId_;
      }
      /**
       * <code>.google.protobuf.Int32Value submodel_id = 2;</code>
       */
      public com.google.protobuf.Int32ValueOrBuilder getSubmodelIdOrBuilder() {
        return getSubmodelId();
      }

      public static final int ADDITIONAL_DATA_FIELD_NUMBER = 3;
      private java.util.List<com.google.protobuf.Any> additionalData_;
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
        return additionalData_;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
          getAdditionalDataOrBuilderList() {
        return additionalData_;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public int getAdditionalDataCount() {
        return additionalData_.size();
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public com.google.protobuf.Any getAdditionalData(int index) {
        return additionalData_.get(index);
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
          int index) {
        return additionalData_.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 {
        if (submodel_ != null) {
          output.writeMessage(1, getSubmodel());
        }
        if (submodelId_ != null) {
          output.writeMessage(2, getSubmodelId());
        }
        for (int i = 0; i < additionalData_.size(); i++) {
          output.writeMessage(3, additionalData_.get(i));
        }
      }

      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (submodel_ != null) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, getSubmodel());
        }
        if (submodelId_ != null) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(2, getSubmodelId());
        }
        for (int i = 0; i < additionalData_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(3, additionalData_.get(i));
        }
        memoizedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof tensorflow.decision_trees.GenericTreeModel.Ensemble.Member)) {
          return super.equals(obj);
        }
        tensorflow.decision_trees.GenericTreeModel.Ensemble.Member other = (tensorflow.decision_trees.GenericTreeModel.Ensemble.Member) obj;

        boolean result = true;
        result = result && (hasSubmodel() == other.hasSubmodel());
        if (hasSubmodel()) {
          result = result && getSubmodel()
              .equals(other.getSubmodel());
        }
        result = result && (hasSubmodelId() == other.hasSubmodelId());
        if (hasSubmodelId()) {
          result = result && getSubmodelId()
              .equals(other.getSubmodelId());
        }
        result = result && getAdditionalDataList()
            .equals(other.getAdditionalDataList());
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (hasSubmodel()) {
          hash = (37 * hash) + SUBMODEL_FIELD_NUMBER;
          hash = (53 * hash) + getSubmodel().hashCode();
        }
        if (hasSubmodelId()) {
          hash = (37 * hash) + SUBMODEL_ID_FIELD_NUMBER;
          hash = (53 * hash) + getSubmodelId().hashCode();
        }
        if (getAdditionalDataCount() > 0) {
          hash = (37 * hash) + ADDITIONAL_DATA_FIELD_NUMBER;
          hash = (53 * hash) + getAdditionalDataList().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static tensorflow.decision_trees.GenericTreeModel.Ensemble.Member parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static tensorflow.decision_trees.GenericTreeModel.Ensemble.Member parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static tensorflow.decision_trees.GenericTreeModel.Ensemble.Member parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static tensorflow.decision_trees.GenericTreeModel.Ensemble.Member parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static tensorflow.decision_trees.GenericTreeModel.Ensemble.Member parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static tensorflow.decision_trees.GenericTreeModel.Ensemble.Member 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 tensorflow.decision_trees.GenericTreeModel.Ensemble.Member parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static tensorflow.decision_trees.GenericTreeModel.Ensemble.Member 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 tensorflow.decision_trees.GenericTreeModel.Ensemble.Member parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static tensorflow.decision_trees.GenericTreeModel.Ensemble.Member 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(tensorflow.decision_trees.GenericTreeModel.Ensemble.Member 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;
      }
      /**
       * Protobuf type {@code tensorflow.decision_trees.Ensemble.Member}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:tensorflow.decision_trees.Ensemble.Member)
          tensorflow.decision_trees.GenericTreeModel.Ensemble.MemberOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Ensemble_Member_descriptor;
        }

        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Ensemble_Member_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  tensorflow.decision_trees.GenericTreeModel.Ensemble.Member.class, tensorflow.decision_trees.GenericTreeModel.Ensemble.Member.Builder.class);
        }

        // Construct using tensorflow.decision_trees.GenericTreeModel.Ensemble.Member.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
            getAdditionalDataFieldBuilder();
          }
        }
        public Builder clear() {
          super.clear();
          if (submodelBuilder_ == null) {
            submodel_ = null;
          } else {
            submodel_ = null;
            submodelBuilder_ = null;
          }
          if (submodelIdBuilder_ == null) {
            submodelId_ = null;
          } else {
            submodelId_ = null;
            submodelIdBuilder_ = null;
          }
          if (additionalDataBuilder_ == null) {
            additionalData_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            additionalDataBuilder_.clear();
          }
          return this;
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Ensemble_Member_descriptor;
        }

        public tensorflow.decision_trees.GenericTreeModel.Ensemble.Member getDefaultInstanceForType() {
          return tensorflow.decision_trees.GenericTreeModel.Ensemble.Member.getDefaultInstance();
        }

        public tensorflow.decision_trees.GenericTreeModel.Ensemble.Member build() {
          tensorflow.decision_trees.GenericTreeModel.Ensemble.Member result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public tensorflow.decision_trees.GenericTreeModel.Ensemble.Member buildPartial() {
          tensorflow.decision_trees.GenericTreeModel.Ensemble.Member result = new tensorflow.decision_trees.GenericTreeModel.Ensemble.Member(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (submodelBuilder_ == null) {
            result.submodel_ = submodel_;
          } else {
            result.submodel_ = submodelBuilder_.build();
          }
          if (submodelIdBuilder_ == null) {
            result.submodelId_ = submodelId_;
          } else {
            result.submodelId_ = submodelIdBuilder_.build();
          }
          if (additionalDataBuilder_ == null) {
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
              additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
              bitField0_ = (bitField0_ & ~0x00000004);
            }
            result.additionalData_ = additionalData_;
          } else {
            result.additionalData_ = additionalDataBuilder_.build();
          }
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder clone() {
          return (Builder) super.clone();
        }
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            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, Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof tensorflow.decision_trees.GenericTreeModel.Ensemble.Member) {
            return mergeFrom((tensorflow.decision_trees.GenericTreeModel.Ensemble.Member)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(tensorflow.decision_trees.GenericTreeModel.Ensemble.Member other) {
          if (other == tensorflow.decision_trees.GenericTreeModel.Ensemble.Member.getDefaultInstance()) return this;
          if (other.hasSubmodel()) {
            mergeSubmodel(other.getSubmodel());
          }
          if (other.hasSubmodelId()) {
            mergeSubmodelId(other.getSubmodelId());
          }
          if (additionalDataBuilder_ == null) {
            if (!other.additionalData_.isEmpty()) {
              if (additionalData_.isEmpty()) {
                additionalData_ = other.additionalData_;
                bitField0_ = (bitField0_ & ~0x00000004);
              } else {
                ensureAdditionalDataIsMutable();
                additionalData_.addAll(other.additionalData_);
              }
              onChanged();
            }
          } else {
            if (!other.additionalData_.isEmpty()) {
              if (additionalDataBuilder_.isEmpty()) {
                additionalDataBuilder_.dispose();
                additionalDataBuilder_ = null;
                additionalData_ = other.additionalData_;
                bitField0_ = (bitField0_ & ~0x00000004);
                additionalDataBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getAdditionalDataFieldBuilder() : null;
              } else {
                additionalDataBuilder_.addAllMessages(other.additionalData_);
              }
            }
          }
          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 {
          tensorflow.decision_trees.GenericTreeModel.Ensemble.Member parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (tensorflow.decision_trees.GenericTreeModel.Ensemble.Member) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private tensorflow.decision_trees.GenericTreeModel.Model submodel_ = null;
        private com.google.protobuf.SingleFieldBuilderV3<
            tensorflow.decision_trees.GenericTreeModel.Model, tensorflow.decision_trees.GenericTreeModel.Model.Builder, tensorflow.decision_trees.GenericTreeModel.ModelOrBuilder> submodelBuilder_;
        /**
         * <code>.tensorflow.decision_trees.Model submodel = 1;</code>
         */
        public boolean hasSubmodel() {
          return submodelBuilder_ != null || submodel_ != null;
        }
        /**
         * <code>.tensorflow.decision_trees.Model submodel = 1;</code>
         */
        public tensorflow.decision_trees.GenericTreeModel.Model getSubmodel() {
          if (submodelBuilder_ == null) {
            return submodel_ == null ? tensorflow.decision_trees.GenericTreeModel.Model.getDefaultInstance() : submodel_;
          } else {
            return submodelBuilder_.getMessage();
          }
        }
        /**
         * <code>.tensorflow.decision_trees.Model submodel = 1;</code>
         */
        public Builder setSubmodel(tensorflow.decision_trees.GenericTreeModel.Model value) {
          if (submodelBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            submodel_ = value;
            onChanged();
          } else {
            submodelBuilder_.setMessage(value);
          }

          return this;
        }
        /**
         * <code>.tensorflow.decision_trees.Model submodel = 1;</code>
         */
        public Builder setSubmodel(
            tensorflow.decision_trees.GenericTreeModel.Model.Builder builderForValue) {
          if (submodelBuilder_ == null) {
            submodel_ = builderForValue.build();
            onChanged();
          } else {
            submodelBuilder_.setMessage(builderForValue.build());
          }

          return this;
        }
        /**
         * <code>.tensorflow.decision_trees.Model submodel = 1;</code>
         */
        public Builder mergeSubmodel(tensorflow.decision_trees.GenericTreeModel.Model value) {
          if (submodelBuilder_ == null) {
            if (submodel_ != null) {
              submodel_ =
                tensorflow.decision_trees.GenericTreeModel.Model.newBuilder(submodel_).mergeFrom(value).buildPartial();
            } else {
              submodel_ = value;
            }
            onChanged();
          } else {
            submodelBuilder_.mergeFrom(value);
          }

          return this;
        }
        /**
         * <code>.tensorflow.decision_trees.Model submodel = 1;</code>
         */
        public Builder clearSubmodel() {
          if (submodelBuilder_ == null) {
            submodel_ = null;
            onChanged();
          } else {
            submodel_ = null;
            submodelBuilder_ = null;
          }

          return this;
        }
        /**
         * <code>.tensorflow.decision_trees.Model submodel = 1;</code>
         */
        public tensorflow.decision_trees.GenericTreeModel.Model.Builder getSubmodelBuilder() {
          
          onChanged();
          return getSubmodelFieldBuilder().getBuilder();
        }
        /**
         * <code>.tensorflow.decision_trees.Model submodel = 1;</code>
         */
        public tensorflow.decision_trees.GenericTreeModel.ModelOrBuilder getSubmodelOrBuilder() {
          if (submodelBuilder_ != null) {
            return submodelBuilder_.getMessageOrBuilder();
          } else {
            return submodel_ == null ?
                tensorflow.decision_trees.GenericTreeModel.Model.getDefaultInstance() : submodel_;
          }
        }
        /**
         * <code>.tensorflow.decision_trees.Model submodel = 1;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            tensorflow.decision_trees.GenericTreeModel.Model, tensorflow.decision_trees.GenericTreeModel.Model.Builder, tensorflow.decision_trees.GenericTreeModel.ModelOrBuilder> 
            getSubmodelFieldBuilder() {
          if (submodelBuilder_ == null) {
            submodelBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                tensorflow.decision_trees.GenericTreeModel.Model, tensorflow.decision_trees.GenericTreeModel.Model.Builder, tensorflow.decision_trees.GenericTreeModel.ModelOrBuilder>(
                    getSubmodel(),
                    getParentForChildren(),
                    isClean());
            submodel_ = null;
          }
          return submodelBuilder_;
        }

        private com.google.protobuf.Int32Value submodelId_ = null;
        private com.google.protobuf.SingleFieldBuilderV3<
            com.google.protobuf.Int32Value, com.google.protobuf.Int32Value.Builder, com.google.protobuf.Int32ValueOrBuilder> submodelIdBuilder_;
        /**
         * <code>.google.protobuf.Int32Value submodel_id = 2;</code>
         */
        public boolean hasSubmodelId() {
          return submodelIdBuilder_ != null || submodelId_ != null;
        }
        /**
         * <code>.google.protobuf.Int32Value submodel_id = 2;</code>
         */
        public com.google.protobuf.Int32Value getSubmodelId() {
          if (submodelIdBuilder_ == null) {
            return submodelId_ == null ? com.google.protobuf.Int32Value.getDefaultInstance() : submodelId_;
          } else {
            return submodelIdBuilder_.getMessage();
          }
        }
        /**
         * <code>.google.protobuf.Int32Value submodel_id = 2;</code>
         */
        public Builder setSubmodelId(com.google.protobuf.Int32Value value) {
          if (submodelIdBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            submodelId_ = value;
            onChanged();
          } else {
            submodelIdBuilder_.setMessage(value);
          }

          return this;
        }
        /**
         * <code>.google.protobuf.Int32Value submodel_id = 2;</code>
         */
        public Builder setSubmodelId(
            com.google.protobuf.Int32Value.Builder builderForValue) {
          if (submodelIdBuilder_ == null) {
            submodelId_ = builderForValue.build();
            onChanged();
          } else {
            submodelIdBuilder_.setMessage(builderForValue.build());
          }

          return this;
        }
        /**
         * <code>.google.protobuf.Int32Value submodel_id = 2;</code>
         */
        public Builder mergeSubmodelId(com.google.protobuf.Int32Value value) {
          if (submodelIdBuilder_ == null) {
            if (submodelId_ != null) {
              submodelId_ =
                com.google.protobuf.Int32Value.newBuilder(submodelId_).mergeFrom(value).buildPartial();
            } else {
              submodelId_ = value;
            }
            onChanged();
          } else {
            submodelIdBuilder_.mergeFrom(value);
          }

          return this;
        }
        /**
         * <code>.google.protobuf.Int32Value submodel_id = 2;</code>
         */
        public Builder clearSubmodelId() {
          if (submodelIdBuilder_ == null) {
            submodelId_ = null;
            onChanged();
          } else {
            submodelId_ = null;
            submodelIdBuilder_ = null;
          }

          return this;
        }
        /**
         * <code>.google.protobuf.Int32Value submodel_id = 2;</code>
         */
        public com.google.protobuf.Int32Value.Builder getSubmodelIdBuilder() {
          
          onChanged();
          return getSubmodelIdFieldBuilder().getBuilder();
        }
        /**
         * <code>.google.protobuf.Int32Value submodel_id = 2;</code>
         */
        public com.google.protobuf.Int32ValueOrBuilder getSubmodelIdOrBuilder() {
          if (submodelIdBuilder_ != null) {
            return submodelIdBuilder_.getMessageOrBuilder();
          } else {
            return submodelId_ == null ?
                com.google.protobuf.Int32Value.getDefaultInstance() : submodelId_;
          }
        }
        /**
         * <code>.google.protobuf.Int32Value submodel_id = 2;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            com.google.protobuf.Int32Value, com.google.protobuf.Int32Value.Builder, com.google.protobuf.Int32ValueOrBuilder> 
            getSubmodelIdFieldBuilder() {
          if (submodelIdBuilder_ == null) {
            submodelIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                com.google.protobuf.Int32Value, com.google.protobuf.Int32Value.Builder, com.google.protobuf.Int32ValueOrBuilder>(
                    getSubmodelId(),
                    getParentForChildren(),
                    isClean());
            submodelId_ = null;
          }
          return submodelIdBuilder_;
        }

        private java.util.List<com.google.protobuf.Any> additionalData_ =
          java.util.Collections.emptyList();
        private void ensureAdditionalDataIsMutable() {
          if (!((bitField0_ & 0x00000004) == 0x00000004)) {
            additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>(additionalData_);
            bitField0_ |= 0x00000004;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> additionalDataBuilder_;

        /**
         * <code>repeated .google.protobuf.Any additional_data = 3;</code>
         */
        public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
          if (additionalDataBuilder_ == null) {
            return java.util.Collections.unmodifiableList(additionalData_);
          } else {
            return additionalDataBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 3;</code>
         */
        public int getAdditionalDataCount() {
          if (additionalDataBuilder_ == null) {
            return additionalData_.size();
          } else {
            return additionalDataBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 3;</code>
         */
        public com.google.protobuf.Any getAdditionalData(int index) {
          if (additionalDataBuilder_ == null) {
            return additionalData_.get(index);
          } else {
            return additionalDataBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 3;</code>
         */
        public Builder setAdditionalData(
            int index, com.google.protobuf.Any value) {
          if (additionalDataBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureAdditionalDataIsMutable();
            additionalData_.set(index, value);
            onChanged();
          } else {
            additionalDataBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 3;</code>
         */
        public Builder setAdditionalData(
            int index, com.google.protobuf.Any.Builder builderForValue) {
          if (additionalDataBuilder_ == null) {
            ensureAdditionalDataIsMutable();
            additionalData_.set(index, builderForValue.build());
            onChanged();
          } else {
            additionalDataBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 3;</code>
         */
        public Builder addAdditionalData(com.google.protobuf.Any value) {
          if (additionalDataBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureAdditionalDataIsMutable();
            additionalData_.add(value);
            onChanged();
          } else {
            additionalDataBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 3;</code>
         */
        public Builder addAdditionalData(
            int index, com.google.protobuf.Any value) {
          if (additionalDataBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureAdditionalDataIsMutable();
            additionalData_.add(index, value);
            onChanged();
          } else {
            additionalDataBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 3;</code>
         */
        public Builder addAdditionalData(
            com.google.protobuf.Any.Builder builderForValue) {
          if (additionalDataBuilder_ == null) {
            ensureAdditionalDataIsMutable();
            additionalData_.add(builderForValue.build());
            onChanged();
          } else {
            additionalDataBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 3;</code>
         */
        public Builder addAdditionalData(
            int index, com.google.protobuf.Any.Builder builderForValue) {
          if (additionalDataBuilder_ == null) {
            ensureAdditionalDataIsMutable();
            additionalData_.add(index, builderForValue.build());
            onChanged();
          } else {
            additionalDataBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 3;</code>
         */
        public Builder addAllAdditionalData(
            java.lang.Iterable<? extends com.google.protobuf.Any> values) {
          if (additionalDataBuilder_ == null) {
            ensureAdditionalDataIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, additionalData_);
            onChanged();
          } else {
            additionalDataBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 3;</code>
         */
        public Builder clearAdditionalData() {
          if (additionalDataBuilder_ == null) {
            additionalData_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000004);
            onChanged();
          } else {
            additionalDataBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 3;</code>
         */
        public Builder removeAdditionalData(int index) {
          if (additionalDataBuilder_ == null) {
            ensureAdditionalDataIsMutable();
            additionalData_.remove(index);
            onChanged();
          } else {
            additionalDataBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 3;</code>
         */
        public com.google.protobuf.Any.Builder getAdditionalDataBuilder(
            int index) {
          return getAdditionalDataFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 3;</code>
         */
        public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
            int index) {
          if (additionalDataBuilder_ == null) {
            return additionalData_.get(index);  } else {
            return additionalDataBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 3;</code>
         */
        public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
             getAdditionalDataOrBuilderList() {
          if (additionalDataBuilder_ != null) {
            return additionalDataBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(additionalData_);
          }
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 3;</code>
         */
        public com.google.protobuf.Any.Builder addAdditionalDataBuilder() {
          return getAdditionalDataFieldBuilder().addBuilder(
              com.google.protobuf.Any.getDefaultInstance());
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 3;</code>
         */
        public com.google.protobuf.Any.Builder addAdditionalDataBuilder(
            int index) {
          return getAdditionalDataFieldBuilder().addBuilder(
              index, com.google.protobuf.Any.getDefaultInstance());
        }
        /**
         * <code>repeated .google.protobuf.Any additional_data = 3;</code>
         */
        public java.util.List<com.google.protobuf.Any.Builder> 
             getAdditionalDataBuilderList() {
          return getAdditionalDataFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> 
            getAdditionalDataFieldBuilder() {
          if (additionalDataBuilder_ == null) {
            additionalDataBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder>(
                    additionalData_,
                    ((bitField0_ & 0x00000004) == 0x00000004),
                    getParentForChildren(),
                    isClean());
            additionalData_ = null;
          }
          return additionalDataBuilder_;
        }
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return this;
        }

        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return this;
        }


        // @@protoc_insertion_point(builder_scope:tensorflow.decision_trees.Ensemble.Member)
      }

      // @@protoc_insertion_point(class_scope:tensorflow.decision_trees.Ensemble.Member)
      private static final tensorflow.decision_trees.GenericTreeModel.Ensemble.Member DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new tensorflow.decision_trees.GenericTreeModel.Ensemble.Member();
      }

      public static tensorflow.decision_trees.GenericTreeModel.Ensemble.Member getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

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

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

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

      public tensorflow.decision_trees.GenericTreeModel.Ensemble.Member getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    private int combinationTechniqueCase_ = 0;
    private java.lang.Object combinationTechnique_;
    public enum CombinationTechniqueCase
        implements com.google.protobuf.Internal.EnumLite {
      SUMMATION_COMBINATION_TECHNIQUE(1),
      AVERAGING_COMBINATION_TECHNIQUE(2),
      CUSTOM_COMBINATION_TECHNIQUE(3),
      COMBINATIONTECHNIQUE_NOT_SET(0);
      private final int value;
      private CombinationTechniqueCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static CombinationTechniqueCase valueOf(int value) {
        return forNumber(value);
      }

      public static CombinationTechniqueCase forNumber(int value) {
        switch (value) {
          case 1: return SUMMATION_COMBINATION_TECHNIQUE;
          case 2: return AVERAGING_COMBINATION_TECHNIQUE;
          case 3: return CUSTOM_COMBINATION_TECHNIQUE;
          case 0: return COMBINATIONTECHNIQUE_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public CombinationTechniqueCase
    getCombinationTechniqueCase() {
      return CombinationTechniqueCase.forNumber(
          combinationTechniqueCase_);
    }

    public static final int MEMBERS_FIELD_NUMBER = 100;
    private java.util.List<tensorflow.decision_trees.GenericTreeModel.Ensemble.Member> members_;
    /**
     * <pre>
     * A higher id for more readable printing.
     * </pre>
     *
     * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
     */
    public java.util.List<tensorflow.decision_trees.GenericTreeModel.Ensemble.Member> getMembersList() {
      return members_;
    }
    /**
     * <pre>
     * A higher id for more readable printing.
     * </pre>
     *
     * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
     */
    public java.util.List<? extends tensorflow.decision_trees.GenericTreeModel.Ensemble.MemberOrBuilder> 
        getMembersOrBuilderList() {
      return members_;
    }
    /**
     * <pre>
     * A higher id for more readable printing.
     * </pre>
     *
     * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
     */
    public int getMembersCount() {
      return members_.size();
    }
    /**
     * <pre>
     * A higher id for more readable printing.
     * </pre>
     *
     * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.Ensemble.Member getMembers(int index) {
      return members_.get(index);
    }
    /**
     * <pre>
     * A higher id for more readable printing.
     * </pre>
     *
     * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.Ensemble.MemberOrBuilder getMembersOrBuilder(
        int index) {
      return members_.get(index);
    }

    public static final int SUMMATION_COMBINATION_TECHNIQUE_FIELD_NUMBER = 1;
    /**
     * <code>.tensorflow.decision_trees.Summation summation_combination_technique = 1;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.Summation getSummationCombinationTechnique() {
      if (combinationTechniqueCase_ == 1) {
         return (tensorflow.decision_trees.GenericTreeModel.Summation) combinationTechnique_;
      }
      return tensorflow.decision_trees.GenericTreeModel.Summation.getDefaultInstance();
    }
    /**
     * <code>.tensorflow.decision_trees.Summation summation_combination_technique = 1;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.SummationOrBuilder getSummationCombinationTechniqueOrBuilder() {
      if (combinationTechniqueCase_ == 1) {
         return (tensorflow.decision_trees.GenericTreeModel.Summation) combinationTechnique_;
      }
      return tensorflow.decision_trees.GenericTreeModel.Summation.getDefaultInstance();
    }

    public static final int AVERAGING_COMBINATION_TECHNIQUE_FIELD_NUMBER = 2;
    /**
     * <code>.tensorflow.decision_trees.Averaging averaging_combination_technique = 2;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.Averaging getAveragingCombinationTechnique() {
      if (combinationTechniqueCase_ == 2) {
         return (tensorflow.decision_trees.GenericTreeModel.Averaging) combinationTechnique_;
      }
      return tensorflow.decision_trees.GenericTreeModel.Averaging.getDefaultInstance();
    }
    /**
     * <code>.tensorflow.decision_trees.Averaging averaging_combination_technique = 2;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.AveragingOrBuilder getAveragingCombinationTechniqueOrBuilder() {
      if (combinationTechniqueCase_ == 2) {
         return (tensorflow.decision_trees.GenericTreeModel.Averaging) combinationTechnique_;
      }
      return tensorflow.decision_trees.GenericTreeModel.Averaging.getDefaultInstance();
    }

    public static final int CUSTOM_COMBINATION_TECHNIQUE_FIELD_NUMBER = 3;
    /**
     * <code>.google.protobuf.Any custom_combination_technique = 3;</code>
     */
    public com.google.protobuf.Any getCustomCombinationTechnique() {
      if (combinationTechniqueCase_ == 3) {
         return (com.google.protobuf.Any) combinationTechnique_;
      }
      return com.google.protobuf.Any.getDefaultInstance();
    }
    /**
     * <code>.google.protobuf.Any custom_combination_technique = 3;</code>
     */
    public com.google.protobuf.AnyOrBuilder getCustomCombinationTechniqueOrBuilder() {
      if (combinationTechniqueCase_ == 3) {
         return (com.google.protobuf.Any) combinationTechnique_;
      }
      return com.google.protobuf.Any.getDefaultInstance();
    }

    public static final int ADDITIONAL_DATA_FIELD_NUMBER = 4;
    private java.util.List<com.google.protobuf.Any> additionalData_;
    /**
     * <code>repeated .google.protobuf.Any additional_data = 4;</code>
     */
    public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
      return additionalData_;
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 4;</code>
     */
    public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
        getAdditionalDataOrBuilderList() {
      return additionalData_;
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 4;</code>
     */
    public int getAdditionalDataCount() {
      return additionalData_.size();
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 4;</code>
     */
    public com.google.protobuf.Any getAdditionalData(int index) {
      return additionalData_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 4;</code>
     */
    public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
        int index) {
      return additionalData_.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 {
      if (combinationTechniqueCase_ == 1) {
        output.writeMessage(1, (tensorflow.decision_trees.GenericTreeModel.Summation) combinationTechnique_);
      }
      if (combinationTechniqueCase_ == 2) {
        output.writeMessage(2, (tensorflow.decision_trees.GenericTreeModel.Averaging) combinationTechnique_);
      }
      if (combinationTechniqueCase_ == 3) {
        output.writeMessage(3, (com.google.protobuf.Any) combinationTechnique_);
      }
      for (int i = 0; i < additionalData_.size(); i++) {
        output.writeMessage(4, additionalData_.get(i));
      }
      for (int i = 0; i < members_.size(); i++) {
        output.writeMessage(100, members_.get(i));
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (combinationTechniqueCase_ == 1) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, (tensorflow.decision_trees.GenericTreeModel.Summation) combinationTechnique_);
      }
      if (combinationTechniqueCase_ == 2) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, (tensorflow.decision_trees.GenericTreeModel.Averaging) combinationTechnique_);
      }
      if (combinationTechniqueCase_ == 3) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, (com.google.protobuf.Any) combinationTechnique_);
      }
      for (int i = 0; i < additionalData_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, additionalData_.get(i));
      }
      for (int i = 0; i < members_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(100, members_.get(i));
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.decision_trees.GenericTreeModel.Ensemble)) {
        return super.equals(obj);
      }
      tensorflow.decision_trees.GenericTreeModel.Ensemble other = (tensorflow.decision_trees.GenericTreeModel.Ensemble) obj;

      boolean result = true;
      result = result && getMembersList()
          .equals(other.getMembersList());
      result = result && getAdditionalDataList()
          .equals(other.getAdditionalDataList());
      result = result && getCombinationTechniqueCase().equals(
          other.getCombinationTechniqueCase());
      if (!result) return false;
      switch (combinationTechniqueCase_) {
        case 1:
          result = result && getSummationCombinationTechnique()
              .equals(other.getSummationCombinationTechnique());
          break;
        case 2:
          result = result && getAveragingCombinationTechnique()
              .equals(other.getAveragingCombinationTechnique());
          break;
        case 3:
          result = result && getCustomCombinationTechnique()
              .equals(other.getCustomCombinationTechnique());
          break;
        case 0:
        default:
      }
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getMembersCount() > 0) {
        hash = (37 * hash) + MEMBERS_FIELD_NUMBER;
        hash = (53 * hash) + getMembersList().hashCode();
      }
      if (getAdditionalDataCount() > 0) {
        hash = (37 * hash) + ADDITIONAL_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getAdditionalDataList().hashCode();
      }
      switch (combinationTechniqueCase_) {
        case 1:
          hash = (37 * hash) + SUMMATION_COMBINATION_TECHNIQUE_FIELD_NUMBER;
          hash = (53 * hash) + getSummationCombinationTechnique().hashCode();
          break;
        case 2:
          hash = (37 * hash) + AVERAGING_COMBINATION_TECHNIQUE_FIELD_NUMBER;
          hash = (53 * hash) + getAveragingCombinationTechnique().hashCode();
          break;
        case 3:
          hash = (37 * hash) + CUSTOM_COMBINATION_TECHNIQUE_FIELD_NUMBER;
          hash = (53 * hash) + getCustomCombinationTechnique().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.decision_trees.GenericTreeModel.Ensemble parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Ensemble parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Ensemble parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Ensemble parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Ensemble parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Ensemble 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 tensorflow.decision_trees.GenericTreeModel.Ensemble parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Ensemble 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 tensorflow.decision_trees.GenericTreeModel.Ensemble parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Ensemble 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(tensorflow.decision_trees.GenericTreeModel.Ensemble 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>
     * An ordered sequence of models. This message can be used to express bagged or
     * boosted models, as well as custom ensembles.
     * </pre>
     *
     * Protobuf type {@code tensorflow.decision_trees.Ensemble}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.decision_trees.Ensemble)
        tensorflow.decision_trees.GenericTreeModel.EnsembleOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Ensemble_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Ensemble_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.decision_trees.GenericTreeModel.Ensemble.class, tensorflow.decision_trees.GenericTreeModel.Ensemble.Builder.class);
      }

      // Construct using tensorflow.decision_trees.GenericTreeModel.Ensemble.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getMembersFieldBuilder();
          getAdditionalDataFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (membersBuilder_ == null) {
          members_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          membersBuilder_.clear();
        }
        if (additionalDataBuilder_ == null) {
          additionalData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          additionalDataBuilder_.clear();
        }
        combinationTechniqueCase_ = 0;
        combinationTechnique_ = null;
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Ensemble_descriptor;
      }

      public tensorflow.decision_trees.GenericTreeModel.Ensemble getDefaultInstanceForType() {
        return tensorflow.decision_trees.GenericTreeModel.Ensemble.getDefaultInstance();
      }

      public tensorflow.decision_trees.GenericTreeModel.Ensemble build() {
        tensorflow.decision_trees.GenericTreeModel.Ensemble result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.decision_trees.GenericTreeModel.Ensemble buildPartial() {
        tensorflow.decision_trees.GenericTreeModel.Ensemble result = new tensorflow.decision_trees.GenericTreeModel.Ensemble(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (membersBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            members_ = java.util.Collections.unmodifiableList(members_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.members_ = members_;
        } else {
          result.members_ = membersBuilder_.build();
        }
        if (combinationTechniqueCase_ == 1) {
          if (summationCombinationTechniqueBuilder_ == null) {
            result.combinationTechnique_ = combinationTechnique_;
          } else {
            result.combinationTechnique_ = summationCombinationTechniqueBuilder_.build();
          }
        }
        if (combinationTechniqueCase_ == 2) {
          if (averagingCombinationTechniqueBuilder_ == null) {
            result.combinationTechnique_ = combinationTechnique_;
          } else {
            result.combinationTechnique_ = averagingCombinationTechniqueBuilder_.build();
          }
        }
        if (combinationTechniqueCase_ == 3) {
          if (customCombinationTechniqueBuilder_ == null) {
            result.combinationTechnique_ = combinationTechnique_;
          } else {
            result.combinationTechnique_ = customCombinationTechniqueBuilder_.build();
          }
        }
        if (additionalDataBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.additionalData_ = additionalData_;
        } else {
          result.additionalData_ = additionalDataBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        result.combinationTechniqueCase_ = combinationTechniqueCase_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          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, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.decision_trees.GenericTreeModel.Ensemble) {
          return mergeFrom((tensorflow.decision_trees.GenericTreeModel.Ensemble)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.decision_trees.GenericTreeModel.Ensemble other) {
        if (other == tensorflow.decision_trees.GenericTreeModel.Ensemble.getDefaultInstance()) return this;
        if (membersBuilder_ == null) {
          if (!other.members_.isEmpty()) {
            if (members_.isEmpty()) {
              members_ = other.members_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureMembersIsMutable();
              members_.addAll(other.members_);
            }
            onChanged();
          }
        } else {
          if (!other.members_.isEmpty()) {
            if (membersBuilder_.isEmpty()) {
              membersBuilder_.dispose();
              membersBuilder_ = null;
              members_ = other.members_;
              bitField0_ = (bitField0_ & ~0x00000001);
              membersBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getMembersFieldBuilder() : null;
            } else {
              membersBuilder_.addAllMessages(other.members_);
            }
          }
        }
        if (additionalDataBuilder_ == null) {
          if (!other.additionalData_.isEmpty()) {
            if (additionalData_.isEmpty()) {
              additionalData_ = other.additionalData_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureAdditionalDataIsMutable();
              additionalData_.addAll(other.additionalData_);
            }
            onChanged();
          }
        } else {
          if (!other.additionalData_.isEmpty()) {
            if (additionalDataBuilder_.isEmpty()) {
              additionalDataBuilder_.dispose();
              additionalDataBuilder_ = null;
              additionalData_ = other.additionalData_;
              bitField0_ = (bitField0_ & ~0x00000010);
              additionalDataBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getAdditionalDataFieldBuilder() : null;
            } else {
              additionalDataBuilder_.addAllMessages(other.additionalData_);
            }
          }
        }
        switch (other.getCombinationTechniqueCase()) {
          case SUMMATION_COMBINATION_TECHNIQUE: {
            mergeSummationCombinationTechnique(other.getSummationCombinationTechnique());
            break;
          }
          case AVERAGING_COMBINATION_TECHNIQUE: {
            mergeAveragingCombinationTechnique(other.getAveragingCombinationTechnique());
            break;
          }
          case CUSTOM_COMBINATION_TECHNIQUE: {
            mergeCustomCombinationTechnique(other.getCustomCombinationTechnique());
            break;
          }
          case COMBINATIONTECHNIQUE_NOT_SET: {
            break;
          }
        }
        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 {
        tensorflow.decision_trees.GenericTreeModel.Ensemble parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.decision_trees.GenericTreeModel.Ensemble) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int combinationTechniqueCase_ = 0;
      private java.lang.Object combinationTechnique_;
      public CombinationTechniqueCase
          getCombinationTechniqueCase() {
        return CombinationTechniqueCase.forNumber(
            combinationTechniqueCase_);
      }

      public Builder clearCombinationTechnique() {
        combinationTechniqueCase_ = 0;
        combinationTechnique_ = null;
        onChanged();
        return this;
      }

      private int bitField0_;

      private java.util.List<tensorflow.decision_trees.GenericTreeModel.Ensemble.Member> members_ =
        java.util.Collections.emptyList();
      private void ensureMembersIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          members_ = new java.util.ArrayList<tensorflow.decision_trees.GenericTreeModel.Ensemble.Member>(members_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.Ensemble.Member, tensorflow.decision_trees.GenericTreeModel.Ensemble.Member.Builder, tensorflow.decision_trees.GenericTreeModel.Ensemble.MemberOrBuilder> membersBuilder_;

      /**
       * <pre>
       * A higher id for more readable printing.
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
       */
      public java.util.List<tensorflow.decision_trees.GenericTreeModel.Ensemble.Member> getMembersList() {
        if (membersBuilder_ == null) {
          return java.util.Collections.unmodifiableList(members_);
        } else {
          return membersBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * A higher id for more readable printing.
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
       */
      public int getMembersCount() {
        if (membersBuilder_ == null) {
          return members_.size();
        } else {
          return membersBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * A higher id for more readable printing.
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Ensemble.Member getMembers(int index) {
        if (membersBuilder_ == null) {
          return members_.get(index);
        } else {
          return membersBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * A higher id for more readable printing.
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
       */
      public Builder setMembers(
          int index, tensorflow.decision_trees.GenericTreeModel.Ensemble.Member value) {
        if (membersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMembersIsMutable();
          members_.set(index, value);
          onChanged();
        } else {
          membersBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * A higher id for more readable printing.
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
       */
      public Builder setMembers(
          int index, tensorflow.decision_trees.GenericTreeModel.Ensemble.Member.Builder builderForValue) {
        if (membersBuilder_ == null) {
          ensureMembersIsMutable();
          members_.set(index, builderForValue.build());
          onChanged();
        } else {
          membersBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * A higher id for more readable printing.
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
       */
      public Builder addMembers(tensorflow.decision_trees.GenericTreeModel.Ensemble.Member value) {
        if (membersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMembersIsMutable();
          members_.add(value);
          onChanged();
        } else {
          membersBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * A higher id for more readable printing.
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
       */
      public Builder addMembers(
          int index, tensorflow.decision_trees.GenericTreeModel.Ensemble.Member value) {
        if (membersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMembersIsMutable();
          members_.add(index, value);
          onChanged();
        } else {
          membersBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * A higher id for more readable printing.
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
       */
      public Builder addMembers(
          tensorflow.decision_trees.GenericTreeModel.Ensemble.Member.Builder builderForValue) {
        if (membersBuilder_ == null) {
          ensureMembersIsMutable();
          members_.add(builderForValue.build());
          onChanged();
        } else {
          membersBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * A higher id for more readable printing.
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
       */
      public Builder addMembers(
          int index, tensorflow.decision_trees.GenericTreeModel.Ensemble.Member.Builder builderForValue) {
        if (membersBuilder_ == null) {
          ensureMembersIsMutable();
          members_.add(index, builderForValue.build());
          onChanged();
        } else {
          membersBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * A higher id for more readable printing.
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
       */
      public Builder addAllMembers(
          java.lang.Iterable<? extends tensorflow.decision_trees.GenericTreeModel.Ensemble.Member> values) {
        if (membersBuilder_ == null) {
          ensureMembersIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, members_);
          onChanged();
        } else {
          membersBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * A higher id for more readable printing.
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
       */
      public Builder clearMembers() {
        if (membersBuilder_ == null) {
          members_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          membersBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * A higher id for more readable printing.
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
       */
      public Builder removeMembers(int index) {
        if (membersBuilder_ == null) {
          ensureMembersIsMutable();
          members_.remove(index);
          onChanged();
        } else {
          membersBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * A higher id for more readable printing.
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Ensemble.Member.Builder getMembersBuilder(
          int index) {
        return getMembersFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * A higher id for more readable printing.
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Ensemble.MemberOrBuilder getMembersOrBuilder(
          int index) {
        if (membersBuilder_ == null) {
          return members_.get(index);  } else {
          return membersBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * A higher id for more readable printing.
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
       */
      public java.util.List<? extends tensorflow.decision_trees.GenericTreeModel.Ensemble.MemberOrBuilder> 
           getMembersOrBuilderList() {
        if (membersBuilder_ != null) {
          return membersBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(members_);
        }
      }
      /**
       * <pre>
       * A higher id for more readable printing.
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Ensemble.Member.Builder addMembersBuilder() {
        return getMembersFieldBuilder().addBuilder(
            tensorflow.decision_trees.GenericTreeModel.Ensemble.Member.getDefaultInstance());
      }
      /**
       * <pre>
       * A higher id for more readable printing.
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Ensemble.Member.Builder addMembersBuilder(
          int index) {
        return getMembersFieldBuilder().addBuilder(
            index, tensorflow.decision_trees.GenericTreeModel.Ensemble.Member.getDefaultInstance());
      }
      /**
       * <pre>
       * A higher id for more readable printing.
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.Ensemble.Member members = 100;</code>
       */
      public java.util.List<tensorflow.decision_trees.GenericTreeModel.Ensemble.Member.Builder> 
           getMembersBuilderList() {
        return getMembersFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.Ensemble.Member, tensorflow.decision_trees.GenericTreeModel.Ensemble.Member.Builder, tensorflow.decision_trees.GenericTreeModel.Ensemble.MemberOrBuilder> 
          getMembersFieldBuilder() {
        if (membersBuilder_ == null) {
          membersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              tensorflow.decision_trees.GenericTreeModel.Ensemble.Member, tensorflow.decision_trees.GenericTreeModel.Ensemble.Member.Builder, tensorflow.decision_trees.GenericTreeModel.Ensemble.MemberOrBuilder>(
                  members_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          members_ = null;
        }
        return membersBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.Summation, tensorflow.decision_trees.GenericTreeModel.Summation.Builder, tensorflow.decision_trees.GenericTreeModel.SummationOrBuilder> summationCombinationTechniqueBuilder_;
      /**
       * <code>.tensorflow.decision_trees.Summation summation_combination_technique = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Summation getSummationCombinationTechnique() {
        if (summationCombinationTechniqueBuilder_ == null) {
          if (combinationTechniqueCase_ == 1) {
            return (tensorflow.decision_trees.GenericTreeModel.Summation) combinationTechnique_;
          }
          return tensorflow.decision_trees.GenericTreeModel.Summation.getDefaultInstance();
        } else {
          if (combinationTechniqueCase_ == 1) {
            return summationCombinationTechniqueBuilder_.getMessage();
          }
          return tensorflow.decision_trees.GenericTreeModel.Summation.getDefaultInstance();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.Summation summation_combination_technique = 1;</code>
       */
      public Builder setSummationCombinationTechnique(tensorflow.decision_trees.GenericTreeModel.Summation value) {
        if (summationCombinationTechniqueBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          combinationTechnique_ = value;
          onChanged();
        } else {
          summationCombinationTechniqueBuilder_.setMessage(value);
        }
        combinationTechniqueCase_ = 1;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Summation summation_combination_technique = 1;</code>
       */
      public Builder setSummationCombinationTechnique(
          tensorflow.decision_trees.GenericTreeModel.Summation.Builder builderForValue) {
        if (summationCombinationTechniqueBuilder_ == null) {
          combinationTechnique_ = builderForValue.build();
          onChanged();
        } else {
          summationCombinationTechniqueBuilder_.setMessage(builderForValue.build());
        }
        combinationTechniqueCase_ = 1;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Summation summation_combination_technique = 1;</code>
       */
      public Builder mergeSummationCombinationTechnique(tensorflow.decision_trees.GenericTreeModel.Summation value) {
        if (summationCombinationTechniqueBuilder_ == null) {
          if (combinationTechniqueCase_ == 1 &&
              combinationTechnique_ != tensorflow.decision_trees.GenericTreeModel.Summation.getDefaultInstance()) {
            combinationTechnique_ = tensorflow.decision_trees.GenericTreeModel.Summation.newBuilder((tensorflow.decision_trees.GenericTreeModel.Summation) combinationTechnique_)
                .mergeFrom(value).buildPartial();
          } else {
            combinationTechnique_ = value;
          }
          onChanged();
        } else {
          if (combinationTechniqueCase_ == 1) {
            summationCombinationTechniqueBuilder_.mergeFrom(value);
          }
          summationCombinationTechniqueBuilder_.setMessage(value);
        }
        combinationTechniqueCase_ = 1;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Summation summation_combination_technique = 1;</code>
       */
      public Builder clearSummationCombinationTechnique() {
        if (summationCombinationTechniqueBuilder_ == null) {
          if (combinationTechniqueCase_ == 1) {
            combinationTechniqueCase_ = 0;
            combinationTechnique_ = null;
            onChanged();
          }
        } else {
          if (combinationTechniqueCase_ == 1) {
            combinationTechniqueCase_ = 0;
            combinationTechnique_ = null;
          }
          summationCombinationTechniqueBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Summation summation_combination_technique = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Summation.Builder getSummationCombinationTechniqueBuilder() {
        return getSummationCombinationTechniqueFieldBuilder().getBuilder();
      }
      /**
       * <code>.tensorflow.decision_trees.Summation summation_combination_technique = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.SummationOrBuilder getSummationCombinationTechniqueOrBuilder() {
        if ((combinationTechniqueCase_ == 1) && (summationCombinationTechniqueBuilder_ != null)) {
          return summationCombinationTechniqueBuilder_.getMessageOrBuilder();
        } else {
          if (combinationTechniqueCase_ == 1) {
            return (tensorflow.decision_trees.GenericTreeModel.Summation) combinationTechnique_;
          }
          return tensorflow.decision_trees.GenericTreeModel.Summation.getDefaultInstance();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.Summation summation_combination_technique = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.Summation, tensorflow.decision_trees.GenericTreeModel.Summation.Builder, tensorflow.decision_trees.GenericTreeModel.SummationOrBuilder> 
          getSummationCombinationTechniqueFieldBuilder() {
        if (summationCombinationTechniqueBuilder_ == null) {
          if (!(combinationTechniqueCase_ == 1)) {
            combinationTechnique_ = tensorflow.decision_trees.GenericTreeModel.Summation.getDefaultInstance();
          }
          summationCombinationTechniqueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              tensorflow.decision_trees.GenericTreeModel.Summation, tensorflow.decision_trees.GenericTreeModel.Summation.Builder, tensorflow.decision_trees.GenericTreeModel.SummationOrBuilder>(
                  (tensorflow.decision_trees.GenericTreeModel.Summation) combinationTechnique_,
                  getParentForChildren(),
                  isClean());
          combinationTechnique_ = null;
        }
        combinationTechniqueCase_ = 1;
        onChanged();;
        return summationCombinationTechniqueBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.Averaging, tensorflow.decision_trees.GenericTreeModel.Averaging.Builder, tensorflow.decision_trees.GenericTreeModel.AveragingOrBuilder> averagingCombinationTechniqueBuilder_;
      /**
       * <code>.tensorflow.decision_trees.Averaging averaging_combination_technique = 2;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Averaging getAveragingCombinationTechnique() {
        if (averagingCombinationTechniqueBuilder_ == null) {
          if (combinationTechniqueCase_ == 2) {
            return (tensorflow.decision_trees.GenericTreeModel.Averaging) combinationTechnique_;
          }
          return tensorflow.decision_trees.GenericTreeModel.Averaging.getDefaultInstance();
        } else {
          if (combinationTechniqueCase_ == 2) {
            return averagingCombinationTechniqueBuilder_.getMessage();
          }
          return tensorflow.decision_trees.GenericTreeModel.Averaging.getDefaultInstance();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.Averaging averaging_combination_technique = 2;</code>
       */
      public Builder setAveragingCombinationTechnique(tensorflow.decision_trees.GenericTreeModel.Averaging value) {
        if (averagingCombinationTechniqueBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          combinationTechnique_ = value;
          onChanged();
        } else {
          averagingCombinationTechniqueBuilder_.setMessage(value);
        }
        combinationTechniqueCase_ = 2;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Averaging averaging_combination_technique = 2;</code>
       */
      public Builder setAveragingCombinationTechnique(
          tensorflow.decision_trees.GenericTreeModel.Averaging.Builder builderForValue) {
        if (averagingCombinationTechniqueBuilder_ == null) {
          combinationTechnique_ = builderForValue.build();
          onChanged();
        } else {
          averagingCombinationTechniqueBuilder_.setMessage(builderForValue.build());
        }
        combinationTechniqueCase_ = 2;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Averaging averaging_combination_technique = 2;</code>
       */
      public Builder mergeAveragingCombinationTechnique(tensorflow.decision_trees.GenericTreeModel.Averaging value) {
        if (averagingCombinationTechniqueBuilder_ == null) {
          if (combinationTechniqueCase_ == 2 &&
              combinationTechnique_ != tensorflow.decision_trees.GenericTreeModel.Averaging.getDefaultInstance()) {
            combinationTechnique_ = tensorflow.decision_trees.GenericTreeModel.Averaging.newBuilder((tensorflow.decision_trees.GenericTreeModel.Averaging) combinationTechnique_)
                .mergeFrom(value).buildPartial();
          } else {
            combinationTechnique_ = value;
          }
          onChanged();
        } else {
          if (combinationTechniqueCase_ == 2) {
            averagingCombinationTechniqueBuilder_.mergeFrom(value);
          }
          averagingCombinationTechniqueBuilder_.setMessage(value);
        }
        combinationTechniqueCase_ = 2;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Averaging averaging_combination_technique = 2;</code>
       */
      public Builder clearAveragingCombinationTechnique() {
        if (averagingCombinationTechniqueBuilder_ == null) {
          if (combinationTechniqueCase_ == 2) {
            combinationTechniqueCase_ = 0;
            combinationTechnique_ = null;
            onChanged();
          }
        } else {
          if (combinationTechniqueCase_ == 2) {
            combinationTechniqueCase_ = 0;
            combinationTechnique_ = null;
          }
          averagingCombinationTechniqueBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Averaging averaging_combination_technique = 2;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Averaging.Builder getAveragingCombinationTechniqueBuilder() {
        return getAveragingCombinationTechniqueFieldBuilder().getBuilder();
      }
      /**
       * <code>.tensorflow.decision_trees.Averaging averaging_combination_technique = 2;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.AveragingOrBuilder getAveragingCombinationTechniqueOrBuilder() {
        if ((combinationTechniqueCase_ == 2) && (averagingCombinationTechniqueBuilder_ != null)) {
          return averagingCombinationTechniqueBuilder_.getMessageOrBuilder();
        } else {
          if (combinationTechniqueCase_ == 2) {
            return (tensorflow.decision_trees.GenericTreeModel.Averaging) combinationTechnique_;
          }
          return tensorflow.decision_trees.GenericTreeModel.Averaging.getDefaultInstance();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.Averaging averaging_combination_technique = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.Averaging, tensorflow.decision_trees.GenericTreeModel.Averaging.Builder, tensorflow.decision_trees.GenericTreeModel.AveragingOrBuilder> 
          getAveragingCombinationTechniqueFieldBuilder() {
        if (averagingCombinationTechniqueBuilder_ == null) {
          if (!(combinationTechniqueCase_ == 2)) {
            combinationTechnique_ = tensorflow.decision_trees.GenericTreeModel.Averaging.getDefaultInstance();
          }
          averagingCombinationTechniqueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              tensorflow.decision_trees.GenericTreeModel.Averaging, tensorflow.decision_trees.GenericTreeModel.Averaging.Builder, tensorflow.decision_trees.GenericTreeModel.AveragingOrBuilder>(
                  (tensorflow.decision_trees.GenericTreeModel.Averaging) combinationTechnique_,
                  getParentForChildren(),
                  isClean());
          combinationTechnique_ = null;
        }
        combinationTechniqueCase_ = 2;
        onChanged();;
        return averagingCombinationTechniqueBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> customCombinationTechniqueBuilder_;
      /**
       * <code>.google.protobuf.Any custom_combination_technique = 3;</code>
       */
      public com.google.protobuf.Any getCustomCombinationTechnique() {
        if (customCombinationTechniqueBuilder_ == null) {
          if (combinationTechniqueCase_ == 3) {
            return (com.google.protobuf.Any) combinationTechnique_;
          }
          return com.google.protobuf.Any.getDefaultInstance();
        } else {
          if (combinationTechniqueCase_ == 3) {
            return customCombinationTechniqueBuilder_.getMessage();
          }
          return com.google.protobuf.Any.getDefaultInstance();
        }
      }
      /**
       * <code>.google.protobuf.Any custom_combination_technique = 3;</code>
       */
      public Builder setCustomCombinationTechnique(com.google.protobuf.Any value) {
        if (customCombinationTechniqueBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          combinationTechnique_ = value;
          onChanged();
        } else {
          customCombinationTechniqueBuilder_.setMessage(value);
        }
        combinationTechniqueCase_ = 3;
        return this;
      }
      /**
       * <code>.google.protobuf.Any custom_combination_technique = 3;</code>
       */
      public Builder setCustomCombinationTechnique(
          com.google.protobuf.Any.Builder builderForValue) {
        if (customCombinationTechniqueBuilder_ == null) {
          combinationTechnique_ = builderForValue.build();
          onChanged();
        } else {
          customCombinationTechniqueBuilder_.setMessage(builderForValue.build());
        }
        combinationTechniqueCase_ = 3;
        return this;
      }
      /**
       * <code>.google.protobuf.Any custom_combination_technique = 3;</code>
       */
      public Builder mergeCustomCombinationTechnique(com.google.protobuf.Any value) {
        if (customCombinationTechniqueBuilder_ == null) {
          if (combinationTechniqueCase_ == 3 &&
              combinationTechnique_ != com.google.protobuf.Any.getDefaultInstance()) {
            combinationTechnique_ = com.google.protobuf.Any.newBuilder((com.google.protobuf.Any) combinationTechnique_)
                .mergeFrom(value).buildPartial();
          } else {
            combinationTechnique_ = value;
          }
          onChanged();
        } else {
          if (combinationTechniqueCase_ == 3) {
            customCombinationTechniqueBuilder_.mergeFrom(value);
          }
          customCombinationTechniqueBuilder_.setMessage(value);
        }
        combinationTechniqueCase_ = 3;
        return this;
      }
      /**
       * <code>.google.protobuf.Any custom_combination_technique = 3;</code>
       */
      public Builder clearCustomCombinationTechnique() {
        if (customCombinationTechniqueBuilder_ == null) {
          if (combinationTechniqueCase_ == 3) {
            combinationTechniqueCase_ = 0;
            combinationTechnique_ = null;
            onChanged();
          }
        } else {
          if (combinationTechniqueCase_ == 3) {
            combinationTechniqueCase_ = 0;
            combinationTechnique_ = null;
          }
          customCombinationTechniqueBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>.google.protobuf.Any custom_combination_technique = 3;</code>
       */
      public com.google.protobuf.Any.Builder getCustomCombinationTechniqueBuilder() {
        return getCustomCombinationTechniqueFieldBuilder().getBuilder();
      }
      /**
       * <code>.google.protobuf.Any custom_combination_technique = 3;</code>
       */
      public com.google.protobuf.AnyOrBuilder getCustomCombinationTechniqueOrBuilder() {
        if ((combinationTechniqueCase_ == 3) && (customCombinationTechniqueBuilder_ != null)) {
          return customCombinationTechniqueBuilder_.getMessageOrBuilder();
        } else {
          if (combinationTechniqueCase_ == 3) {
            return (com.google.protobuf.Any) combinationTechnique_;
          }
          return com.google.protobuf.Any.getDefaultInstance();
        }
      }
      /**
       * <code>.google.protobuf.Any custom_combination_technique = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> 
          getCustomCombinationTechniqueFieldBuilder() {
        if (customCombinationTechniqueBuilder_ == null) {
          if (!(combinationTechniqueCase_ == 3)) {
            combinationTechnique_ = com.google.protobuf.Any.getDefaultInstance();
          }
          customCombinationTechniqueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder>(
                  (com.google.protobuf.Any) combinationTechnique_,
                  getParentForChildren(),
                  isClean());
          combinationTechnique_ = null;
        }
        combinationTechniqueCase_ = 3;
        onChanged();;
        return customCombinationTechniqueBuilder_;
      }

      private java.util.List<com.google.protobuf.Any> additionalData_ =
        java.util.Collections.emptyList();
      private void ensureAdditionalDataIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>(additionalData_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> additionalDataBuilder_;

      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
        if (additionalDataBuilder_ == null) {
          return java.util.Collections.unmodifiableList(additionalData_);
        } else {
          return additionalDataBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public int getAdditionalDataCount() {
        if (additionalDataBuilder_ == null) {
          return additionalData_.size();
        } else {
          return additionalDataBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public com.google.protobuf.Any getAdditionalData(int index) {
        if (additionalDataBuilder_ == null) {
          return additionalData_.get(index);
        } else {
          return additionalDataBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public Builder setAdditionalData(
          int index, com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.set(index, value);
          onChanged();
        } else {
          additionalDataBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public Builder setAdditionalData(
          int index, com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.set(index, builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public Builder addAdditionalData(com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.add(value);
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public Builder addAdditionalData(
          int index, com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.add(index, value);
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public Builder addAdditionalData(
          com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.add(builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public Builder addAdditionalData(
          int index, com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.add(index, builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public Builder addAllAdditionalData(
          java.lang.Iterable<? extends com.google.protobuf.Any> values) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, additionalData_);
          onChanged();
        } else {
          additionalDataBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public Builder clearAdditionalData() {
        if (additionalDataBuilder_ == null) {
          additionalData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          additionalDataBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public Builder removeAdditionalData(int index) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.remove(index);
          onChanged();
        } else {
          additionalDataBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public com.google.protobuf.Any.Builder getAdditionalDataBuilder(
          int index) {
        return getAdditionalDataFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
          int index) {
        if (additionalDataBuilder_ == null) {
          return additionalData_.get(index);  } else {
          return additionalDataBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
           getAdditionalDataOrBuilderList() {
        if (additionalDataBuilder_ != null) {
          return additionalDataBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(additionalData_);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public com.google.protobuf.Any.Builder addAdditionalDataBuilder() {
        return getAdditionalDataFieldBuilder().addBuilder(
            com.google.protobuf.Any.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public com.google.protobuf.Any.Builder addAdditionalDataBuilder(
          int index) {
        return getAdditionalDataFieldBuilder().addBuilder(
            index, com.google.protobuf.Any.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 4;</code>
       */
      public java.util.List<com.google.protobuf.Any.Builder> 
           getAdditionalDataBuilderList() {
        return getAdditionalDataFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> 
          getAdditionalDataFieldBuilder() {
        if (additionalDataBuilder_ == null) {
          additionalDataBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder>(
                  additionalData_,
                  ((bitField0_ & 0x00000010) == 0x00000010),
                  getParentForChildren(),
                  isClean());
          additionalData_ = null;
        }
        return additionalDataBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.decision_trees.Ensemble)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.decision_trees.Ensemble)
    private static final tensorflow.decision_trees.GenericTreeModel.Ensemble DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.decision_trees.GenericTreeModel.Ensemble();
    }

    public static tensorflow.decision_trees.GenericTreeModel.Ensemble getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public tensorflow.decision_trees.GenericTreeModel.Ensemble getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SummationOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.decision_trees.Summation)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .google.protobuf.Any additional_data = 1;</code>
     */
    java.util.List<com.google.protobuf.Any> 
        getAdditionalDataList();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 1;</code>
     */
    com.google.protobuf.Any getAdditionalData(int index);
    /**
     * <code>repeated .google.protobuf.Any additional_data = 1;</code>
     */
    int getAdditionalDataCount();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 1;</code>
     */
    java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
        getAdditionalDataOrBuilderList();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 1;</code>
     */
    com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
        int index);
  }
  /**
   * <pre>
   * When present, the Ensemble's output is the sum of member models' outputs.
   * </pre>
   *
   * Protobuf type {@code tensorflow.decision_trees.Summation}
   */
  public  static final class Summation extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.decision_trees.Summation)
      SummationOrBuilder {
    // Use Summation.newBuilder() to construct.
    private Summation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Summation() {
      additionalData_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private Summation(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>();
                mutable_bitField0_ |= 0x00000001;
              }
              additionalData_.add(
                  input.readMessage(com.google.protobuf.Any.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)) {
          additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
        }
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Summation_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Summation_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.decision_trees.GenericTreeModel.Summation.class, tensorflow.decision_trees.GenericTreeModel.Summation.Builder.class);
    }

    public static final int ADDITIONAL_DATA_FIELD_NUMBER = 1;
    private java.util.List<com.google.protobuf.Any> additionalData_;
    /**
     * <code>repeated .google.protobuf.Any additional_data = 1;</code>
     */
    public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
      return additionalData_;
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 1;</code>
     */
    public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
        getAdditionalDataOrBuilderList() {
      return additionalData_;
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 1;</code>
     */
    public int getAdditionalDataCount() {
      return additionalData_.size();
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 1;</code>
     */
    public com.google.protobuf.Any getAdditionalData(int index) {
      return additionalData_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 1;</code>
     */
    public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
        int index) {
      return additionalData_.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 < additionalData_.size(); i++) {
        output.writeMessage(1, additionalData_.get(i));
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < additionalData_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, additionalData_.get(i));
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.decision_trees.GenericTreeModel.Summation)) {
        return super.equals(obj);
      }
      tensorflow.decision_trees.GenericTreeModel.Summation other = (tensorflow.decision_trees.GenericTreeModel.Summation) obj;

      boolean result = true;
      result = result && getAdditionalDataList()
          .equals(other.getAdditionalDataList());
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getAdditionalDataCount() > 0) {
        hash = (37 * hash) + ADDITIONAL_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getAdditionalDataList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.decision_trees.GenericTreeModel.Summation parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Summation parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Summation parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Summation parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Summation parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Summation 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 tensorflow.decision_trees.GenericTreeModel.Summation parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Summation 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 tensorflow.decision_trees.GenericTreeModel.Summation parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Summation 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(tensorflow.decision_trees.GenericTreeModel.Summation 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>
     * When present, the Ensemble's output is the sum of member models' outputs.
     * </pre>
     *
     * Protobuf type {@code tensorflow.decision_trees.Summation}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.decision_trees.Summation)
        tensorflow.decision_trees.GenericTreeModel.SummationOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Summation_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Summation_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.decision_trees.GenericTreeModel.Summation.class, tensorflow.decision_trees.GenericTreeModel.Summation.Builder.class);
      }

      // Construct using tensorflow.decision_trees.GenericTreeModel.Summation.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getAdditionalDataFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (additionalDataBuilder_ == null) {
          additionalData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          additionalDataBuilder_.clear();
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Summation_descriptor;
      }

      public tensorflow.decision_trees.GenericTreeModel.Summation getDefaultInstanceForType() {
        return tensorflow.decision_trees.GenericTreeModel.Summation.getDefaultInstance();
      }

      public tensorflow.decision_trees.GenericTreeModel.Summation build() {
        tensorflow.decision_trees.GenericTreeModel.Summation result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.decision_trees.GenericTreeModel.Summation buildPartial() {
        tensorflow.decision_trees.GenericTreeModel.Summation result = new tensorflow.decision_trees.GenericTreeModel.Summation(this);
        int from_bitField0_ = bitField0_;
        if (additionalDataBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.additionalData_ = additionalData_;
        } else {
          result.additionalData_ = additionalDataBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          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, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.decision_trees.GenericTreeModel.Summation) {
          return mergeFrom((tensorflow.decision_trees.GenericTreeModel.Summation)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.decision_trees.GenericTreeModel.Summation other) {
        if (other == tensorflow.decision_trees.GenericTreeModel.Summation.getDefaultInstance()) return this;
        if (additionalDataBuilder_ == null) {
          if (!other.additionalData_.isEmpty()) {
            if (additionalData_.isEmpty()) {
              additionalData_ = other.additionalData_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureAdditionalDataIsMutable();
              additionalData_.addAll(other.additionalData_);
            }
            onChanged();
          }
        } else {
          if (!other.additionalData_.isEmpty()) {
            if (additionalDataBuilder_.isEmpty()) {
              additionalDataBuilder_.dispose();
              additionalDataBuilder_ = null;
              additionalData_ = other.additionalData_;
              bitField0_ = (bitField0_ & ~0x00000001);
              additionalDataBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getAdditionalDataFieldBuilder() : null;
            } else {
              additionalDataBuilder_.addAllMessages(other.additionalData_);
            }
          }
        }
        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 {
        tensorflow.decision_trees.GenericTreeModel.Summation parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.decision_trees.GenericTreeModel.Summation) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<com.google.protobuf.Any> additionalData_ =
        java.util.Collections.emptyList();
      private void ensureAdditionalDataIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>(additionalData_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> additionalDataBuilder_;

      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
        if (additionalDataBuilder_ == null) {
          return java.util.Collections.unmodifiableList(additionalData_);
        } else {
          return additionalDataBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public int getAdditionalDataCount() {
        if (additionalDataBuilder_ == null) {
          return additionalData_.size();
        } else {
          return additionalDataBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public com.google.protobuf.Any getAdditionalData(int index) {
        if (additionalDataBuilder_ == null) {
          return additionalData_.get(index);
        } else {
          return additionalDataBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public Builder setAdditionalData(
          int index, com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.set(index, value);
          onChanged();
        } else {
          additionalDataBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public Builder setAdditionalData(
          int index, com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.set(index, builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public Builder addAdditionalData(com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.add(value);
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public Builder addAdditionalData(
          int index, com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.add(index, value);
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public Builder addAdditionalData(
          com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.add(builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public Builder addAdditionalData(
          int index, com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.add(index, builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public Builder addAllAdditionalData(
          java.lang.Iterable<? extends com.google.protobuf.Any> values) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, additionalData_);
          onChanged();
        } else {
          additionalDataBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public Builder clearAdditionalData() {
        if (additionalDataBuilder_ == null) {
          additionalData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          additionalDataBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public Builder removeAdditionalData(int index) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.remove(index);
          onChanged();
        } else {
          additionalDataBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public com.google.protobuf.Any.Builder getAdditionalDataBuilder(
          int index) {
        return getAdditionalDataFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
          int index) {
        if (additionalDataBuilder_ == null) {
          return additionalData_.get(index);  } else {
          return additionalDataBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
           getAdditionalDataOrBuilderList() {
        if (additionalDataBuilder_ != null) {
          return additionalDataBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(additionalData_);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public com.google.protobuf.Any.Builder addAdditionalDataBuilder() {
        return getAdditionalDataFieldBuilder().addBuilder(
            com.google.protobuf.Any.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public com.google.protobuf.Any.Builder addAdditionalDataBuilder(
          int index) {
        return getAdditionalDataFieldBuilder().addBuilder(
            index, com.google.protobuf.Any.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public java.util.List<com.google.protobuf.Any.Builder> 
           getAdditionalDataBuilderList() {
        return getAdditionalDataFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> 
          getAdditionalDataFieldBuilder() {
        if (additionalDataBuilder_ == null) {
          additionalDataBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder>(
                  additionalData_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          additionalData_ = null;
        }
        return additionalDataBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.decision_trees.Summation)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.decision_trees.Summation)
    private static final tensorflow.decision_trees.GenericTreeModel.Summation DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.decision_trees.GenericTreeModel.Summation();
    }

    public static tensorflow.decision_trees.GenericTreeModel.Summation getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public tensorflow.decision_trees.GenericTreeModel.Summation getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AveragingOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.decision_trees.Averaging)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .google.protobuf.Any additional_data = 1;</code>
     */
    java.util.List<com.google.protobuf.Any> 
        getAdditionalDataList();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 1;</code>
     */
    com.google.protobuf.Any getAdditionalData(int index);
    /**
     * <code>repeated .google.protobuf.Any additional_data = 1;</code>
     */
    int getAdditionalDataCount();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 1;</code>
     */
    java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
        getAdditionalDataOrBuilderList();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 1;</code>
     */
    com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
        int index);
  }
  /**
   * <pre>
   * When present, the Ensemble's output is the average of member models' outputs.
   * </pre>
   *
   * Protobuf type {@code tensorflow.decision_trees.Averaging}
   */
  public  static final class Averaging extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.decision_trees.Averaging)
      AveragingOrBuilder {
    // Use Averaging.newBuilder() to construct.
    private Averaging(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Averaging() {
      additionalData_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private Averaging(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>();
                mutable_bitField0_ |= 0x00000001;
              }
              additionalData_.add(
                  input.readMessage(com.google.protobuf.Any.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)) {
          additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
        }
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Averaging_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Averaging_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.decision_trees.GenericTreeModel.Averaging.class, tensorflow.decision_trees.GenericTreeModel.Averaging.Builder.class);
    }

    public static final int ADDITIONAL_DATA_FIELD_NUMBER = 1;
    private java.util.List<com.google.protobuf.Any> additionalData_;
    /**
     * <code>repeated .google.protobuf.Any additional_data = 1;</code>
     */
    public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
      return additionalData_;
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 1;</code>
     */
    public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
        getAdditionalDataOrBuilderList() {
      return additionalData_;
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 1;</code>
     */
    public int getAdditionalDataCount() {
      return additionalData_.size();
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 1;</code>
     */
    public com.google.protobuf.Any getAdditionalData(int index) {
      return additionalData_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 1;</code>
     */
    public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
        int index) {
      return additionalData_.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 < additionalData_.size(); i++) {
        output.writeMessage(1, additionalData_.get(i));
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < additionalData_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, additionalData_.get(i));
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.decision_trees.GenericTreeModel.Averaging)) {
        return super.equals(obj);
      }
      tensorflow.decision_trees.GenericTreeModel.Averaging other = (tensorflow.decision_trees.GenericTreeModel.Averaging) obj;

      boolean result = true;
      result = result && getAdditionalDataList()
          .equals(other.getAdditionalDataList());
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getAdditionalDataCount() > 0) {
        hash = (37 * hash) + ADDITIONAL_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getAdditionalDataList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.decision_trees.GenericTreeModel.Averaging parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Averaging parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Averaging parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Averaging parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Averaging parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Averaging 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 tensorflow.decision_trees.GenericTreeModel.Averaging parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Averaging 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 tensorflow.decision_trees.GenericTreeModel.Averaging parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Averaging 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(tensorflow.decision_trees.GenericTreeModel.Averaging 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>
     * When present, the Ensemble's output is the average of member models' outputs.
     * </pre>
     *
     * Protobuf type {@code tensorflow.decision_trees.Averaging}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.decision_trees.Averaging)
        tensorflow.decision_trees.GenericTreeModel.AveragingOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Averaging_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Averaging_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.decision_trees.GenericTreeModel.Averaging.class, tensorflow.decision_trees.GenericTreeModel.Averaging.Builder.class);
      }

      // Construct using tensorflow.decision_trees.GenericTreeModel.Averaging.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getAdditionalDataFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (additionalDataBuilder_ == null) {
          additionalData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          additionalDataBuilder_.clear();
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Averaging_descriptor;
      }

      public tensorflow.decision_trees.GenericTreeModel.Averaging getDefaultInstanceForType() {
        return tensorflow.decision_trees.GenericTreeModel.Averaging.getDefaultInstance();
      }

      public tensorflow.decision_trees.GenericTreeModel.Averaging build() {
        tensorflow.decision_trees.GenericTreeModel.Averaging result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.decision_trees.GenericTreeModel.Averaging buildPartial() {
        tensorflow.decision_trees.GenericTreeModel.Averaging result = new tensorflow.decision_trees.GenericTreeModel.Averaging(this);
        int from_bitField0_ = bitField0_;
        if (additionalDataBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.additionalData_ = additionalData_;
        } else {
          result.additionalData_ = additionalDataBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          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, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.decision_trees.GenericTreeModel.Averaging) {
          return mergeFrom((tensorflow.decision_trees.GenericTreeModel.Averaging)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.decision_trees.GenericTreeModel.Averaging other) {
        if (other == tensorflow.decision_trees.GenericTreeModel.Averaging.getDefaultInstance()) return this;
        if (additionalDataBuilder_ == null) {
          if (!other.additionalData_.isEmpty()) {
            if (additionalData_.isEmpty()) {
              additionalData_ = other.additionalData_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureAdditionalDataIsMutable();
              additionalData_.addAll(other.additionalData_);
            }
            onChanged();
          }
        } else {
          if (!other.additionalData_.isEmpty()) {
            if (additionalDataBuilder_.isEmpty()) {
              additionalDataBuilder_.dispose();
              additionalDataBuilder_ = null;
              additionalData_ = other.additionalData_;
              bitField0_ = (bitField0_ & ~0x00000001);
              additionalDataBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getAdditionalDataFieldBuilder() : null;
            } else {
              additionalDataBuilder_.addAllMessages(other.additionalData_);
            }
          }
        }
        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 {
        tensorflow.decision_trees.GenericTreeModel.Averaging parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.decision_trees.GenericTreeModel.Averaging) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<com.google.protobuf.Any> additionalData_ =
        java.util.Collections.emptyList();
      private void ensureAdditionalDataIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>(additionalData_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> additionalDataBuilder_;

      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
        if (additionalDataBuilder_ == null) {
          return java.util.Collections.unmodifiableList(additionalData_);
        } else {
          return additionalDataBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public int getAdditionalDataCount() {
        if (additionalDataBuilder_ == null) {
          return additionalData_.size();
        } else {
          return additionalDataBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public com.google.protobuf.Any getAdditionalData(int index) {
        if (additionalDataBuilder_ == null) {
          return additionalData_.get(index);
        } else {
          return additionalDataBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public Builder setAdditionalData(
          int index, com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.set(index, value);
          onChanged();
        } else {
          additionalDataBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public Builder setAdditionalData(
          int index, com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.set(index, builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public Builder addAdditionalData(com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.add(value);
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public Builder addAdditionalData(
          int index, com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.add(index, value);
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public Builder addAdditionalData(
          com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.add(builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public Builder addAdditionalData(
          int index, com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.add(index, builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public Builder addAllAdditionalData(
          java.lang.Iterable<? extends com.google.protobuf.Any> values) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, additionalData_);
          onChanged();
        } else {
          additionalDataBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public Builder clearAdditionalData() {
        if (additionalDataBuilder_ == null) {
          additionalData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          additionalDataBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public Builder removeAdditionalData(int index) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.remove(index);
          onChanged();
        } else {
          additionalDataBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public com.google.protobuf.Any.Builder getAdditionalDataBuilder(
          int index) {
        return getAdditionalDataFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
          int index) {
        if (additionalDataBuilder_ == null) {
          return additionalData_.get(index);  } else {
          return additionalDataBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
           getAdditionalDataOrBuilderList() {
        if (additionalDataBuilder_ != null) {
          return additionalDataBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(additionalData_);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public com.google.protobuf.Any.Builder addAdditionalDataBuilder() {
        return getAdditionalDataFieldBuilder().addBuilder(
            com.google.protobuf.Any.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public com.google.protobuf.Any.Builder addAdditionalDataBuilder(
          int index) {
        return getAdditionalDataFieldBuilder().addBuilder(
            index, com.google.protobuf.Any.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 1;</code>
       */
      public java.util.List<com.google.protobuf.Any.Builder> 
           getAdditionalDataBuilderList() {
        return getAdditionalDataFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> 
          getAdditionalDataFieldBuilder() {
        if (additionalDataBuilder_ == null) {
          additionalDataBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder>(
                  additionalData_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          additionalData_ = null;
        }
        return additionalDataBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.decision_trees.Averaging)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.decision_trees.Averaging)
    private static final tensorflow.decision_trees.GenericTreeModel.Averaging DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.decision_trees.GenericTreeModel.Averaging();
    }

    public static tensorflow.decision_trees.GenericTreeModel.Averaging getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public tensorflow.decision_trees.GenericTreeModel.Averaging getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DecisionTreeOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.decision_trees.DecisionTree)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
     */
    java.util.List<tensorflow.decision_trees.GenericTreeModel.TreeNode> 
        getNodesList();
    /**
     * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.TreeNode getNodes(int index);
    /**
     * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
     */
    int getNodesCount();
    /**
     * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
     */
    java.util.List<? extends tensorflow.decision_trees.GenericTreeModel.TreeNodeOrBuilder> 
        getNodesOrBuilderList();
    /**
     * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.TreeNodeOrBuilder getNodesOrBuilder(
        int index);

    /**
     * <code>repeated .google.protobuf.Any additional_data = 2;</code>
     */
    java.util.List<com.google.protobuf.Any> 
        getAdditionalDataList();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 2;</code>
     */
    com.google.protobuf.Any getAdditionalData(int index);
    /**
     * <code>repeated .google.protobuf.Any additional_data = 2;</code>
     */
    int getAdditionalDataCount();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 2;</code>
     */
    java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
        getAdditionalDataOrBuilderList();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 2;</code>
     */
    com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code tensorflow.decision_trees.DecisionTree}
   */
  public  static final class DecisionTree extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.decision_trees.DecisionTree)
      DecisionTreeOrBuilder {
    // Use DecisionTree.newBuilder() to construct.
    private DecisionTree(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private DecisionTree() {
      nodes_ = java.util.Collections.emptyList();
      additionalData_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private DecisionTree(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                nodes_ = new java.util.ArrayList<tensorflow.decision_trees.GenericTreeModel.TreeNode>();
                mutable_bitField0_ |= 0x00000001;
              }
              nodes_.add(
                  input.readMessage(tensorflow.decision_trees.GenericTreeModel.TreeNode.parser(), extensionRegistry));
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>();
                mutable_bitField0_ |= 0x00000002;
              }
              additionalData_.add(
                  input.readMessage(com.google.protobuf.Any.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)) {
          nodes_ = java.util.Collections.unmodifiableList(nodes_);
        }
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
        }
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_DecisionTree_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_DecisionTree_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.decision_trees.GenericTreeModel.DecisionTree.class, tensorflow.decision_trees.GenericTreeModel.DecisionTree.Builder.class);
    }

    public static final int NODES_FIELD_NUMBER = 1;
    private java.util.List<tensorflow.decision_trees.GenericTreeModel.TreeNode> nodes_;
    /**
     * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
     */
    public java.util.List<tensorflow.decision_trees.GenericTreeModel.TreeNode> getNodesList() {
      return nodes_;
    }
    /**
     * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
     */
    public java.util.List<? extends tensorflow.decision_trees.GenericTreeModel.TreeNodeOrBuilder> 
        getNodesOrBuilderList() {
      return nodes_;
    }
    /**
     * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
     */
    public int getNodesCount() {
      return nodes_.size();
    }
    /**
     * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.TreeNode getNodes(int index) {
      return nodes_.get(index);
    }
    /**
     * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.TreeNodeOrBuilder getNodesOrBuilder(
        int index) {
      return nodes_.get(index);
    }

    public static final int ADDITIONAL_DATA_FIELD_NUMBER = 2;
    private java.util.List<com.google.protobuf.Any> additionalData_;
    /**
     * <code>repeated .google.protobuf.Any additional_data = 2;</code>
     */
    public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
      return additionalData_;
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 2;</code>
     */
    public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
        getAdditionalDataOrBuilderList() {
      return additionalData_;
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 2;</code>
     */
    public int getAdditionalDataCount() {
      return additionalData_.size();
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 2;</code>
     */
    public com.google.protobuf.Any getAdditionalData(int index) {
      return additionalData_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 2;</code>
     */
    public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
        int index) {
      return additionalData_.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 < nodes_.size(); i++) {
        output.writeMessage(1, nodes_.get(i));
      }
      for (int i = 0; i < additionalData_.size(); i++) {
        output.writeMessage(2, additionalData_.get(i));
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < nodes_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, nodes_.get(i));
      }
      for (int i = 0; i < additionalData_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, additionalData_.get(i));
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.decision_trees.GenericTreeModel.DecisionTree)) {
        return super.equals(obj);
      }
      tensorflow.decision_trees.GenericTreeModel.DecisionTree other = (tensorflow.decision_trees.GenericTreeModel.DecisionTree) obj;

      boolean result = true;
      result = result && getNodesList()
          .equals(other.getNodesList());
      result = result && getAdditionalDataList()
          .equals(other.getAdditionalDataList());
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getNodesCount() > 0) {
        hash = (37 * hash) + NODES_FIELD_NUMBER;
        hash = (53 * hash) + getNodesList().hashCode();
      }
      if (getAdditionalDataCount() > 0) {
        hash = (37 * hash) + ADDITIONAL_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getAdditionalDataList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.decision_trees.GenericTreeModel.DecisionTree parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.DecisionTree parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.DecisionTree parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.DecisionTree parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.DecisionTree parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.DecisionTree 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 tensorflow.decision_trees.GenericTreeModel.DecisionTree parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.DecisionTree 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 tensorflow.decision_trees.GenericTreeModel.DecisionTree parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.DecisionTree 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(tensorflow.decision_trees.GenericTreeModel.DecisionTree 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;
    }
    /**
     * Protobuf type {@code tensorflow.decision_trees.DecisionTree}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.decision_trees.DecisionTree)
        tensorflow.decision_trees.GenericTreeModel.DecisionTreeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_DecisionTree_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_DecisionTree_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.decision_trees.GenericTreeModel.DecisionTree.class, tensorflow.decision_trees.GenericTreeModel.DecisionTree.Builder.class);
      }

      // Construct using tensorflow.decision_trees.GenericTreeModel.DecisionTree.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getNodesFieldBuilder();
          getAdditionalDataFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (nodesBuilder_ == null) {
          nodes_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          nodesBuilder_.clear();
        }
        if (additionalDataBuilder_ == null) {
          additionalData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          additionalDataBuilder_.clear();
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_DecisionTree_descriptor;
      }

      public tensorflow.decision_trees.GenericTreeModel.DecisionTree getDefaultInstanceForType() {
        return tensorflow.decision_trees.GenericTreeModel.DecisionTree.getDefaultInstance();
      }

      public tensorflow.decision_trees.GenericTreeModel.DecisionTree build() {
        tensorflow.decision_trees.GenericTreeModel.DecisionTree result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.decision_trees.GenericTreeModel.DecisionTree buildPartial() {
        tensorflow.decision_trees.GenericTreeModel.DecisionTree result = new tensorflow.decision_trees.GenericTreeModel.DecisionTree(this);
        int from_bitField0_ = bitField0_;
        if (nodesBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            nodes_ = java.util.Collections.unmodifiableList(nodes_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.nodes_ = nodes_;
        } else {
          result.nodes_ = nodesBuilder_.build();
        }
        if (additionalDataBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.additionalData_ = additionalData_;
        } else {
          result.additionalData_ = additionalDataBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          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, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.decision_trees.GenericTreeModel.DecisionTree) {
          return mergeFrom((tensorflow.decision_trees.GenericTreeModel.DecisionTree)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.decision_trees.GenericTreeModel.DecisionTree other) {
        if (other == tensorflow.decision_trees.GenericTreeModel.DecisionTree.getDefaultInstance()) return this;
        if (nodesBuilder_ == null) {
          if (!other.nodes_.isEmpty()) {
            if (nodes_.isEmpty()) {
              nodes_ = other.nodes_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureNodesIsMutable();
              nodes_.addAll(other.nodes_);
            }
            onChanged();
          }
        } else {
          if (!other.nodes_.isEmpty()) {
            if (nodesBuilder_.isEmpty()) {
              nodesBuilder_.dispose();
              nodesBuilder_ = null;
              nodes_ = other.nodes_;
              bitField0_ = (bitField0_ & ~0x00000001);
              nodesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getNodesFieldBuilder() : null;
            } else {
              nodesBuilder_.addAllMessages(other.nodes_);
            }
          }
        }
        if (additionalDataBuilder_ == null) {
          if (!other.additionalData_.isEmpty()) {
            if (additionalData_.isEmpty()) {
              additionalData_ = other.additionalData_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureAdditionalDataIsMutable();
              additionalData_.addAll(other.additionalData_);
            }
            onChanged();
          }
        } else {
          if (!other.additionalData_.isEmpty()) {
            if (additionalDataBuilder_.isEmpty()) {
              additionalDataBuilder_.dispose();
              additionalDataBuilder_ = null;
              additionalData_ = other.additionalData_;
              bitField0_ = (bitField0_ & ~0x00000002);
              additionalDataBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getAdditionalDataFieldBuilder() : null;
            } else {
              additionalDataBuilder_.addAllMessages(other.additionalData_);
            }
          }
        }
        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 {
        tensorflow.decision_trees.GenericTreeModel.DecisionTree parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.decision_trees.GenericTreeModel.DecisionTree) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<tensorflow.decision_trees.GenericTreeModel.TreeNode> nodes_ =
        java.util.Collections.emptyList();
      private void ensureNodesIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          nodes_ = new java.util.ArrayList<tensorflow.decision_trees.GenericTreeModel.TreeNode>(nodes_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.TreeNode, tensorflow.decision_trees.GenericTreeModel.TreeNode.Builder, tensorflow.decision_trees.GenericTreeModel.TreeNodeOrBuilder> nodesBuilder_;

      /**
       * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
       */
      public java.util.List<tensorflow.decision_trees.GenericTreeModel.TreeNode> getNodesList() {
        if (nodesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(nodes_);
        } else {
          return nodesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
       */
      public int getNodesCount() {
        if (nodesBuilder_ == null) {
          return nodes_.size();
        } else {
          return nodesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.TreeNode getNodes(int index) {
        if (nodesBuilder_ == null) {
          return nodes_.get(index);
        } else {
          return nodesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
       */
      public Builder setNodes(
          int index, tensorflow.decision_trees.GenericTreeModel.TreeNode value) {
        if (nodesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNodesIsMutable();
          nodes_.set(index, value);
          onChanged();
        } else {
          nodesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
       */
      public Builder setNodes(
          int index, tensorflow.decision_trees.GenericTreeModel.TreeNode.Builder builderForValue) {
        if (nodesBuilder_ == null) {
          ensureNodesIsMutable();
          nodes_.set(index, builderForValue.build());
          onChanged();
        } else {
          nodesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
       */
      public Builder addNodes(tensorflow.decision_trees.GenericTreeModel.TreeNode value) {
        if (nodesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNodesIsMutable();
          nodes_.add(value);
          onChanged();
        } else {
          nodesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
       */
      public Builder addNodes(
          int index, tensorflow.decision_trees.GenericTreeModel.TreeNode value) {
        if (nodesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNodesIsMutable();
          nodes_.add(index, value);
          onChanged();
        } else {
          nodesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
       */
      public Builder addNodes(
          tensorflow.decision_trees.GenericTreeModel.TreeNode.Builder builderForValue) {
        if (nodesBuilder_ == null) {
          ensureNodesIsMutable();
          nodes_.add(builderForValue.build());
          onChanged();
        } else {
          nodesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
       */
      public Builder addNodes(
          int index, tensorflow.decision_trees.GenericTreeModel.TreeNode.Builder builderForValue) {
        if (nodesBuilder_ == null) {
          ensureNodesIsMutable();
          nodes_.add(index, builderForValue.build());
          onChanged();
        } else {
          nodesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
       */
      public Builder addAllNodes(
          java.lang.Iterable<? extends tensorflow.decision_trees.GenericTreeModel.TreeNode> values) {
        if (nodesBuilder_ == null) {
          ensureNodesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, nodes_);
          onChanged();
        } else {
          nodesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
       */
      public Builder clearNodes() {
        if (nodesBuilder_ == null) {
          nodes_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          nodesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
       */
      public Builder removeNodes(int index) {
        if (nodesBuilder_ == null) {
          ensureNodesIsMutable();
          nodes_.remove(index);
          onChanged();
        } else {
          nodesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.TreeNode.Builder getNodesBuilder(
          int index) {
        return getNodesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.TreeNodeOrBuilder getNodesOrBuilder(
          int index) {
        if (nodesBuilder_ == null) {
          return nodes_.get(index);  } else {
          return nodesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
       */
      public java.util.List<? extends tensorflow.decision_trees.GenericTreeModel.TreeNodeOrBuilder> 
           getNodesOrBuilderList() {
        if (nodesBuilder_ != null) {
          return nodesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(nodes_);
        }
      }
      /**
       * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.TreeNode.Builder addNodesBuilder() {
        return getNodesFieldBuilder().addBuilder(
            tensorflow.decision_trees.GenericTreeModel.TreeNode.getDefaultInstance());
      }
      /**
       * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.TreeNode.Builder addNodesBuilder(
          int index) {
        return getNodesFieldBuilder().addBuilder(
            index, tensorflow.decision_trees.GenericTreeModel.TreeNode.getDefaultInstance());
      }
      /**
       * <code>repeated .tensorflow.decision_trees.TreeNode nodes = 1;</code>
       */
      public java.util.List<tensorflow.decision_trees.GenericTreeModel.TreeNode.Builder> 
           getNodesBuilderList() {
        return getNodesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.TreeNode, tensorflow.decision_trees.GenericTreeModel.TreeNode.Builder, tensorflow.decision_trees.GenericTreeModel.TreeNodeOrBuilder> 
          getNodesFieldBuilder() {
        if (nodesBuilder_ == null) {
          nodesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              tensorflow.decision_trees.GenericTreeModel.TreeNode, tensorflow.decision_trees.GenericTreeModel.TreeNode.Builder, tensorflow.decision_trees.GenericTreeModel.TreeNodeOrBuilder>(
                  nodes_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          nodes_ = null;
        }
        return nodesBuilder_;
      }

      private java.util.List<com.google.protobuf.Any> additionalData_ =
        java.util.Collections.emptyList();
      private void ensureAdditionalDataIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>(additionalData_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> additionalDataBuilder_;

      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
        if (additionalDataBuilder_ == null) {
          return java.util.Collections.unmodifiableList(additionalData_);
        } else {
          return additionalDataBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public int getAdditionalDataCount() {
        if (additionalDataBuilder_ == null) {
          return additionalData_.size();
        } else {
          return additionalDataBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public com.google.protobuf.Any getAdditionalData(int index) {
        if (additionalDataBuilder_ == null) {
          return additionalData_.get(index);
        } else {
          return additionalDataBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public Builder setAdditionalData(
          int index, com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.set(index, value);
          onChanged();
        } else {
          additionalDataBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public Builder setAdditionalData(
          int index, com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.set(index, builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public Builder addAdditionalData(com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.add(value);
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public Builder addAdditionalData(
          int index, com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.add(index, value);
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public Builder addAdditionalData(
          com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.add(builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public Builder addAdditionalData(
          int index, com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.add(index, builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public Builder addAllAdditionalData(
          java.lang.Iterable<? extends com.google.protobuf.Any> values) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, additionalData_);
          onChanged();
        } else {
          additionalDataBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public Builder clearAdditionalData() {
        if (additionalDataBuilder_ == null) {
          additionalData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          additionalDataBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public Builder removeAdditionalData(int index) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.remove(index);
          onChanged();
        } else {
          additionalDataBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public com.google.protobuf.Any.Builder getAdditionalDataBuilder(
          int index) {
        return getAdditionalDataFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
          int index) {
        if (additionalDataBuilder_ == null) {
          return additionalData_.get(index);  } else {
          return additionalDataBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
           getAdditionalDataOrBuilderList() {
        if (additionalDataBuilder_ != null) {
          return additionalDataBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(additionalData_);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public com.google.protobuf.Any.Builder addAdditionalDataBuilder() {
        return getAdditionalDataFieldBuilder().addBuilder(
            com.google.protobuf.Any.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public com.google.protobuf.Any.Builder addAdditionalDataBuilder(
          int index) {
        return getAdditionalDataFieldBuilder().addBuilder(
            index, com.google.protobuf.Any.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public java.util.List<com.google.protobuf.Any.Builder> 
           getAdditionalDataBuilderList() {
        return getAdditionalDataFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> 
          getAdditionalDataFieldBuilder() {
        if (additionalDataBuilder_ == null) {
          additionalDataBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder>(
                  additionalData_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          additionalData_ = null;
        }
        return additionalDataBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.decision_trees.DecisionTree)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.decision_trees.DecisionTree)
    private static final tensorflow.decision_trees.GenericTreeModel.DecisionTree DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.decision_trees.GenericTreeModel.DecisionTree();
    }

    public static tensorflow.decision_trees.GenericTreeModel.DecisionTree getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public tensorflow.decision_trees.GenericTreeModel.DecisionTree getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface TreeNodeOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.decision_trees.TreeNode)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Following fields are provided for convenience and better readability.
     * Filling them in is not required.
     * </pre>
     *
     * <code>.google.protobuf.Int32Value node_id = 1;</code>
     */
    boolean hasNodeId();
    /**
     * <pre>
     * Following fields are provided for convenience and better readability.
     * Filling them in is not required.
     * </pre>
     *
     * <code>.google.protobuf.Int32Value node_id = 1;</code>
     */
    com.google.protobuf.Int32Value getNodeId();
    /**
     * <pre>
     * Following fields are provided for convenience and better readability.
     * Filling them in is not required.
     * </pre>
     *
     * <code>.google.protobuf.Int32Value node_id = 1;</code>
     */
    com.google.protobuf.Int32ValueOrBuilder getNodeIdOrBuilder();

    /**
     * <code>.google.protobuf.Int32Value depth = 2;</code>
     */
    boolean hasDepth();
    /**
     * <code>.google.protobuf.Int32Value depth = 2;</code>
     */
    com.google.protobuf.Int32Value getDepth();
    /**
     * <code>.google.protobuf.Int32Value depth = 2;</code>
     */
    com.google.protobuf.Int32ValueOrBuilder getDepthOrBuilder();

    /**
     * <code>.google.protobuf.Int32Value subtree_size = 3;</code>
     */
    boolean hasSubtreeSize();
    /**
     * <code>.google.protobuf.Int32Value subtree_size = 3;</code>
     */
    com.google.protobuf.Int32Value getSubtreeSize();
    /**
     * <code>.google.protobuf.Int32Value subtree_size = 3;</code>
     */
    com.google.protobuf.Int32ValueOrBuilder getSubtreeSizeOrBuilder();

    /**
     * <code>.tensorflow.decision_trees.BinaryNode binary_node = 4;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.BinaryNode getBinaryNode();
    /**
     * <code>.tensorflow.decision_trees.BinaryNode binary_node = 4;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.BinaryNodeOrBuilder getBinaryNodeOrBuilder();

    /**
     * <code>.tensorflow.decision_trees.Leaf leaf = 5;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.Leaf getLeaf();
    /**
     * <code>.tensorflow.decision_trees.Leaf leaf = 5;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.LeafOrBuilder getLeafOrBuilder();

    /**
     * <code>.google.protobuf.Any custom_node_type = 6;</code>
     */
    com.google.protobuf.Any getCustomNodeType();
    /**
     * <code>.google.protobuf.Any custom_node_type = 6;</code>
     */
    com.google.protobuf.AnyOrBuilder getCustomNodeTypeOrBuilder();

    /**
     * <code>repeated .google.protobuf.Any additional_data = 7;</code>
     */
    java.util.List<com.google.protobuf.Any> 
        getAdditionalDataList();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 7;</code>
     */
    com.google.protobuf.Any getAdditionalData(int index);
    /**
     * <code>repeated .google.protobuf.Any additional_data = 7;</code>
     */
    int getAdditionalDataCount();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 7;</code>
     */
    java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
        getAdditionalDataOrBuilderList();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 7;</code>
     */
    com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
        int index);

    public tensorflow.decision_trees.GenericTreeModel.TreeNode.NodeTypeCase getNodeTypeCase();
  }
  /**
   * Protobuf type {@code tensorflow.decision_trees.TreeNode}
   */
  public  static final class TreeNode extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.decision_trees.TreeNode)
      TreeNodeOrBuilder {
    // Use TreeNode.newBuilder() to construct.
    private TreeNode(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private TreeNode() {
      additionalData_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private TreeNode(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.Int32Value.Builder subBuilder = null;
              if (nodeId_ != null) {
                subBuilder = nodeId_.toBuilder();
              }
              nodeId_ = input.readMessage(com.google.protobuf.Int32Value.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(nodeId_);
                nodeId_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              com.google.protobuf.Int32Value.Builder subBuilder = null;
              if (depth_ != null) {
                subBuilder = depth_.toBuilder();
              }
              depth_ = input.readMessage(com.google.protobuf.Int32Value.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(depth_);
                depth_ = subBuilder.buildPartial();
              }

              break;
            }
            case 26: {
              com.google.protobuf.Int32Value.Builder subBuilder = null;
              if (subtreeSize_ != null) {
                subBuilder = subtreeSize_.toBuilder();
              }
              subtreeSize_ = input.readMessage(com.google.protobuf.Int32Value.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(subtreeSize_);
                subtreeSize_ = subBuilder.buildPartial();
              }

              break;
            }
            case 34: {
              tensorflow.decision_trees.GenericTreeModel.BinaryNode.Builder subBuilder = null;
              if (nodeTypeCase_ == 4) {
                subBuilder = ((tensorflow.decision_trees.GenericTreeModel.BinaryNode) nodeType_).toBuilder();
              }
              nodeType_ =
                  input.readMessage(tensorflow.decision_trees.GenericTreeModel.BinaryNode.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((tensorflow.decision_trees.GenericTreeModel.BinaryNode) nodeType_);
                nodeType_ = subBuilder.buildPartial();
              }
              nodeTypeCase_ = 4;
              break;
            }
            case 42: {
              tensorflow.decision_trees.GenericTreeModel.Leaf.Builder subBuilder = null;
              if (nodeTypeCase_ == 5) {
                subBuilder = ((tensorflow.decision_trees.GenericTreeModel.Leaf) nodeType_).toBuilder();
              }
              nodeType_ =
                  input.readMessage(tensorflow.decision_trees.GenericTreeModel.Leaf.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((tensorflow.decision_trees.GenericTreeModel.Leaf) nodeType_);
                nodeType_ = subBuilder.buildPartial();
              }
              nodeTypeCase_ = 5;
              break;
            }
            case 50: {
              com.google.protobuf.Any.Builder subBuilder = null;
              if (nodeTypeCase_ == 6) {
                subBuilder = ((com.google.protobuf.Any) nodeType_).toBuilder();
              }
              nodeType_ =
                  input.readMessage(com.google.protobuf.Any.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((com.google.protobuf.Any) nodeType_);
                nodeType_ = subBuilder.buildPartial();
              }
              nodeTypeCase_ = 6;
              break;
            }
            case 58: {
              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>();
                mutable_bitField0_ |= 0x00000040;
              }
              additionalData_.add(
                  input.readMessage(com.google.protobuf.Any.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_ & 0x00000040) == 0x00000040)) {
          additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
        }
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_TreeNode_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_TreeNode_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.decision_trees.GenericTreeModel.TreeNode.class, tensorflow.decision_trees.GenericTreeModel.TreeNode.Builder.class);
    }

    private int bitField0_;
    private int nodeTypeCase_ = 0;
    private java.lang.Object nodeType_;
    public enum NodeTypeCase
        implements com.google.protobuf.Internal.EnumLite {
      BINARY_NODE(4),
      LEAF(5),
      CUSTOM_NODE_TYPE(6),
      NODETYPE_NOT_SET(0);
      private final int value;
      private NodeTypeCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static NodeTypeCase valueOf(int value) {
        return forNumber(value);
      }

      public static NodeTypeCase forNumber(int value) {
        switch (value) {
          case 4: return BINARY_NODE;
          case 5: return LEAF;
          case 6: return CUSTOM_NODE_TYPE;
          case 0: return NODETYPE_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public NodeTypeCase
    getNodeTypeCase() {
      return NodeTypeCase.forNumber(
          nodeTypeCase_);
    }

    public static final int NODE_ID_FIELD_NUMBER = 1;
    private com.google.protobuf.Int32Value nodeId_;
    /**
     * <pre>
     * Following fields are provided for convenience and better readability.
     * Filling them in is not required.
     * </pre>
     *
     * <code>.google.protobuf.Int32Value node_id = 1;</code>
     */
    public boolean hasNodeId() {
      return nodeId_ != null;
    }
    /**
     * <pre>
     * Following fields are provided for convenience and better readability.
     * Filling them in is not required.
     * </pre>
     *
     * <code>.google.protobuf.Int32Value node_id = 1;</code>
     */
    public com.google.protobuf.Int32Value getNodeId() {
      return nodeId_ == null ? com.google.protobuf.Int32Value.getDefaultInstance() : nodeId_;
    }
    /**
     * <pre>
     * Following fields are provided for convenience and better readability.
     * Filling them in is not required.
     * </pre>
     *
     * <code>.google.protobuf.Int32Value node_id = 1;</code>
     */
    public com.google.protobuf.Int32ValueOrBuilder getNodeIdOrBuilder() {
      return getNodeId();
    }

    public static final int DEPTH_FIELD_NUMBER = 2;
    private com.google.protobuf.Int32Value depth_;
    /**
     * <code>.google.protobuf.Int32Value depth = 2;</code>
     */
    public boolean hasDepth() {
      return depth_ != null;
    }
    /**
     * <code>.google.protobuf.Int32Value depth = 2;</code>
     */
    public com.google.protobuf.Int32Value getDepth() {
      return depth_ == null ? com.google.protobuf.Int32Value.getDefaultInstance() : depth_;
    }
    /**
     * <code>.google.protobuf.Int32Value depth = 2;</code>
     */
    public com.google.protobuf.Int32ValueOrBuilder getDepthOrBuilder() {
      return getDepth();
    }

    public static final int SUBTREE_SIZE_FIELD_NUMBER = 3;
    private com.google.protobuf.Int32Value subtreeSize_;
    /**
     * <code>.google.protobuf.Int32Value subtree_size = 3;</code>
     */
    public boolean hasSubtreeSize() {
      return subtreeSize_ != null;
    }
    /**
     * <code>.google.protobuf.Int32Value subtree_size = 3;</code>
     */
    public com.google.protobuf.Int32Value getSubtreeSize() {
      return subtreeSize_ == null ? com.google.protobuf.Int32Value.getDefaultInstance() : subtreeSize_;
    }
    /**
     * <code>.google.protobuf.Int32Value subtree_size = 3;</code>
     */
    public com.google.protobuf.Int32ValueOrBuilder getSubtreeSizeOrBuilder() {
      return getSubtreeSize();
    }

    public static final int BINARY_NODE_FIELD_NUMBER = 4;
    /**
     * <code>.tensorflow.decision_trees.BinaryNode binary_node = 4;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.BinaryNode getBinaryNode() {
      if (nodeTypeCase_ == 4) {
         return (tensorflow.decision_trees.GenericTreeModel.BinaryNode) nodeType_;
      }
      return tensorflow.decision_trees.GenericTreeModel.BinaryNode.getDefaultInstance();
    }
    /**
     * <code>.tensorflow.decision_trees.BinaryNode binary_node = 4;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.BinaryNodeOrBuilder getBinaryNodeOrBuilder() {
      if (nodeTypeCase_ == 4) {
         return (tensorflow.decision_trees.GenericTreeModel.BinaryNode) nodeType_;
      }
      return tensorflow.decision_trees.GenericTreeModel.BinaryNode.getDefaultInstance();
    }

    public static final int LEAF_FIELD_NUMBER = 5;
    /**
     * <code>.tensorflow.decision_trees.Leaf leaf = 5;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.Leaf getLeaf() {
      if (nodeTypeCase_ == 5) {
         return (tensorflow.decision_trees.GenericTreeModel.Leaf) nodeType_;
      }
      return tensorflow.decision_trees.GenericTreeModel.Leaf.getDefaultInstance();
    }
    /**
     * <code>.tensorflow.decision_trees.Leaf leaf = 5;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.LeafOrBuilder getLeafOrBuilder() {
      if (nodeTypeCase_ == 5) {
         return (tensorflow.decision_trees.GenericTreeModel.Leaf) nodeType_;
      }
      return tensorflow.decision_trees.GenericTreeModel.Leaf.getDefaultInstance();
    }

    public static final int CUSTOM_NODE_TYPE_FIELD_NUMBER = 6;
    /**
     * <code>.google.protobuf.Any custom_node_type = 6;</code>
     */
    public com.google.protobuf.Any getCustomNodeType() {
      if (nodeTypeCase_ == 6) {
         return (com.google.protobuf.Any) nodeType_;
      }
      return com.google.protobuf.Any.getDefaultInstance();
    }
    /**
     * <code>.google.protobuf.Any custom_node_type = 6;</code>
     */
    public com.google.protobuf.AnyOrBuilder getCustomNodeTypeOrBuilder() {
      if (nodeTypeCase_ == 6) {
         return (com.google.protobuf.Any) nodeType_;
      }
      return com.google.protobuf.Any.getDefaultInstance();
    }

    public static final int ADDITIONAL_DATA_FIELD_NUMBER = 7;
    private java.util.List<com.google.protobuf.Any> additionalData_;
    /**
     * <code>repeated .google.protobuf.Any additional_data = 7;</code>
     */
    public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
      return additionalData_;
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 7;</code>
     */
    public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
        getAdditionalDataOrBuilderList() {
      return additionalData_;
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 7;</code>
     */
    public int getAdditionalDataCount() {
      return additionalData_.size();
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 7;</code>
     */
    public com.google.protobuf.Any getAdditionalData(int index) {
      return additionalData_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 7;</code>
     */
    public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
        int index) {
      return additionalData_.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 {
      if (nodeId_ != null) {
        output.writeMessage(1, getNodeId());
      }
      if (depth_ != null) {
        output.writeMessage(2, getDepth());
      }
      if (subtreeSize_ != null) {
        output.writeMessage(3, getSubtreeSize());
      }
      if (nodeTypeCase_ == 4) {
        output.writeMessage(4, (tensorflow.decision_trees.GenericTreeModel.BinaryNode) nodeType_);
      }
      if (nodeTypeCase_ == 5) {
        output.writeMessage(5, (tensorflow.decision_trees.GenericTreeModel.Leaf) nodeType_);
      }
      if (nodeTypeCase_ == 6) {
        output.writeMessage(6, (com.google.protobuf.Any) nodeType_);
      }
      for (int i = 0; i < additionalData_.size(); i++) {
        output.writeMessage(7, additionalData_.get(i));
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (nodeId_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getNodeId());
      }
      if (depth_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getDepth());
      }
      if (subtreeSize_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getSubtreeSize());
      }
      if (nodeTypeCase_ == 4) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, (tensorflow.decision_trees.GenericTreeModel.BinaryNode) nodeType_);
      }
      if (nodeTypeCase_ == 5) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, (tensorflow.decision_trees.GenericTreeModel.Leaf) nodeType_);
      }
      if (nodeTypeCase_ == 6) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, (com.google.protobuf.Any) nodeType_);
      }
      for (int i = 0; i < additionalData_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, additionalData_.get(i));
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.decision_trees.GenericTreeModel.TreeNode)) {
        return super.equals(obj);
      }
      tensorflow.decision_trees.GenericTreeModel.TreeNode other = (tensorflow.decision_trees.GenericTreeModel.TreeNode) obj;

      boolean result = true;
      result = result && (hasNodeId() == other.hasNodeId());
      if (hasNodeId()) {
        result = result && getNodeId()
            .equals(other.getNodeId());
      }
      result = result && (hasDepth() == other.hasDepth());
      if (hasDepth()) {
        result = result && getDepth()
            .equals(other.getDepth());
      }
      result = result && (hasSubtreeSize() == other.hasSubtreeSize());
      if (hasSubtreeSize()) {
        result = result && getSubtreeSize()
            .equals(other.getSubtreeSize());
      }
      result = result && getAdditionalDataList()
          .equals(other.getAdditionalDataList());
      result = result && getNodeTypeCase().equals(
          other.getNodeTypeCase());
      if (!result) return false;
      switch (nodeTypeCase_) {
        case 4:
          result = result && getBinaryNode()
              .equals(other.getBinaryNode());
          break;
        case 5:
          result = result && getLeaf()
              .equals(other.getLeaf());
          break;
        case 6:
          result = result && getCustomNodeType()
              .equals(other.getCustomNodeType());
          break;
        case 0:
        default:
      }
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasNodeId()) {
        hash = (37 * hash) + NODE_ID_FIELD_NUMBER;
        hash = (53 * hash) + getNodeId().hashCode();
      }
      if (hasDepth()) {
        hash = (37 * hash) + DEPTH_FIELD_NUMBER;
        hash = (53 * hash) + getDepth().hashCode();
      }
      if (hasSubtreeSize()) {
        hash = (37 * hash) + SUBTREE_SIZE_FIELD_NUMBER;
        hash = (53 * hash) + getSubtreeSize().hashCode();
      }
      if (getAdditionalDataCount() > 0) {
        hash = (37 * hash) + ADDITIONAL_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getAdditionalDataList().hashCode();
      }
      switch (nodeTypeCase_) {
        case 4:
          hash = (37 * hash) + BINARY_NODE_FIELD_NUMBER;
          hash = (53 * hash) + getBinaryNode().hashCode();
          break;
        case 5:
          hash = (37 * hash) + LEAF_FIELD_NUMBER;
          hash = (53 * hash) + getLeaf().hashCode();
          break;
        case 6:
          hash = (37 * hash) + CUSTOM_NODE_TYPE_FIELD_NUMBER;
          hash = (53 * hash) + getCustomNodeType().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.decision_trees.GenericTreeModel.TreeNode parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.TreeNode parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.TreeNode parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.TreeNode parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.TreeNode parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.TreeNode 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 tensorflow.decision_trees.GenericTreeModel.TreeNode parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.TreeNode 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 tensorflow.decision_trees.GenericTreeModel.TreeNode parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.TreeNode 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(tensorflow.decision_trees.GenericTreeModel.TreeNode 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;
    }
    /**
     * Protobuf type {@code tensorflow.decision_trees.TreeNode}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.decision_trees.TreeNode)
        tensorflow.decision_trees.GenericTreeModel.TreeNodeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_TreeNode_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_TreeNode_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.decision_trees.GenericTreeModel.TreeNode.class, tensorflow.decision_trees.GenericTreeModel.TreeNode.Builder.class);
      }

      // Construct using tensorflow.decision_trees.GenericTreeModel.TreeNode.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getAdditionalDataFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (nodeIdBuilder_ == null) {
          nodeId_ = null;
        } else {
          nodeId_ = null;
          nodeIdBuilder_ = null;
        }
        if (depthBuilder_ == null) {
          depth_ = null;
        } else {
          depth_ = null;
          depthBuilder_ = null;
        }
        if (subtreeSizeBuilder_ == null) {
          subtreeSize_ = null;
        } else {
          subtreeSize_ = null;
          subtreeSizeBuilder_ = null;
        }
        if (additionalDataBuilder_ == null) {
          additionalData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
        } else {
          additionalDataBuilder_.clear();
        }
        nodeTypeCase_ = 0;
        nodeType_ = null;
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_TreeNode_descriptor;
      }

      public tensorflow.decision_trees.GenericTreeModel.TreeNode getDefaultInstanceForType() {
        return tensorflow.decision_trees.GenericTreeModel.TreeNode.getDefaultInstance();
      }

      public tensorflow.decision_trees.GenericTreeModel.TreeNode build() {
        tensorflow.decision_trees.GenericTreeModel.TreeNode result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.decision_trees.GenericTreeModel.TreeNode buildPartial() {
        tensorflow.decision_trees.GenericTreeModel.TreeNode result = new tensorflow.decision_trees.GenericTreeModel.TreeNode(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (nodeIdBuilder_ == null) {
          result.nodeId_ = nodeId_;
        } else {
          result.nodeId_ = nodeIdBuilder_.build();
        }
        if (depthBuilder_ == null) {
          result.depth_ = depth_;
        } else {
          result.depth_ = depthBuilder_.build();
        }
        if (subtreeSizeBuilder_ == null) {
          result.subtreeSize_ = subtreeSize_;
        } else {
          result.subtreeSize_ = subtreeSizeBuilder_.build();
        }
        if (nodeTypeCase_ == 4) {
          if (binaryNodeBuilder_ == null) {
            result.nodeType_ = nodeType_;
          } else {
            result.nodeType_ = binaryNodeBuilder_.build();
          }
        }
        if (nodeTypeCase_ == 5) {
          if (leafBuilder_ == null) {
            result.nodeType_ = nodeType_;
          } else {
            result.nodeType_ = leafBuilder_.build();
          }
        }
        if (nodeTypeCase_ == 6) {
          if (customNodeTypeBuilder_ == null) {
            result.nodeType_ = nodeType_;
          } else {
            result.nodeType_ = customNodeTypeBuilder_.build();
          }
        }
        if (additionalDataBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.additionalData_ = additionalData_;
        } else {
          result.additionalData_ = additionalDataBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        result.nodeTypeCase_ = nodeTypeCase_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          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, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.decision_trees.GenericTreeModel.TreeNode) {
          return mergeFrom((tensorflow.decision_trees.GenericTreeModel.TreeNode)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.decision_trees.GenericTreeModel.TreeNode other) {
        if (other == tensorflow.decision_trees.GenericTreeModel.TreeNode.getDefaultInstance()) return this;
        if (other.hasNodeId()) {
          mergeNodeId(other.getNodeId());
        }
        if (other.hasDepth()) {
          mergeDepth(other.getDepth());
        }
        if (other.hasSubtreeSize()) {
          mergeSubtreeSize(other.getSubtreeSize());
        }
        if (additionalDataBuilder_ == null) {
          if (!other.additionalData_.isEmpty()) {
            if (additionalData_.isEmpty()) {
              additionalData_ = other.additionalData_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureAdditionalDataIsMutable();
              additionalData_.addAll(other.additionalData_);
            }
            onChanged();
          }
        } else {
          if (!other.additionalData_.isEmpty()) {
            if (additionalDataBuilder_.isEmpty()) {
              additionalDataBuilder_.dispose();
              additionalDataBuilder_ = null;
              additionalData_ = other.additionalData_;
              bitField0_ = (bitField0_ & ~0x00000040);
              additionalDataBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getAdditionalDataFieldBuilder() : null;
            } else {
              additionalDataBuilder_.addAllMessages(other.additionalData_);
            }
          }
        }
        switch (other.getNodeTypeCase()) {
          case BINARY_NODE: {
            mergeBinaryNode(other.getBinaryNode());
            break;
          }
          case LEAF: {
            mergeLeaf(other.getLeaf());
            break;
          }
          case CUSTOM_NODE_TYPE: {
            mergeCustomNodeType(other.getCustomNodeType());
            break;
          }
          case NODETYPE_NOT_SET: {
            break;
          }
        }
        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 {
        tensorflow.decision_trees.GenericTreeModel.TreeNode parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.decision_trees.GenericTreeModel.TreeNode) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int nodeTypeCase_ = 0;
      private java.lang.Object nodeType_;
      public NodeTypeCase
          getNodeTypeCase() {
        return NodeTypeCase.forNumber(
            nodeTypeCase_);
      }

      public Builder clearNodeType() {
        nodeTypeCase_ = 0;
        nodeType_ = null;
        onChanged();
        return this;
      }

      private int bitField0_;

      private com.google.protobuf.Int32Value nodeId_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Int32Value, com.google.protobuf.Int32Value.Builder, com.google.protobuf.Int32ValueOrBuilder> nodeIdBuilder_;
      /**
       * <pre>
       * Following fields are provided for convenience and better readability.
       * Filling them in is not required.
       * </pre>
       *
       * <code>.google.protobuf.Int32Value node_id = 1;</code>
       */
      public boolean hasNodeId() {
        return nodeIdBuilder_ != null || nodeId_ != null;
      }
      /**
       * <pre>
       * Following fields are provided for convenience and better readability.
       * Filling them in is not required.
       * </pre>
       *
       * <code>.google.protobuf.Int32Value node_id = 1;</code>
       */
      public com.google.protobuf.Int32Value getNodeId() {
        if (nodeIdBuilder_ == null) {
          return nodeId_ == null ? com.google.protobuf.Int32Value.getDefaultInstance() : nodeId_;
        } else {
          return nodeIdBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Following fields are provided for convenience and better readability.
       * Filling them in is not required.
       * </pre>
       *
       * <code>.google.protobuf.Int32Value node_id = 1;</code>
       */
      public Builder setNodeId(com.google.protobuf.Int32Value value) {
        if (nodeIdBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          nodeId_ = value;
          onChanged();
        } else {
          nodeIdBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * Following fields are provided for convenience and better readability.
       * Filling them in is not required.
       * </pre>
       *
       * <code>.google.protobuf.Int32Value node_id = 1;</code>
       */
      public Builder setNodeId(
          com.google.protobuf.Int32Value.Builder builderForValue) {
        if (nodeIdBuilder_ == null) {
          nodeId_ = builderForValue.build();
          onChanged();
        } else {
          nodeIdBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * Following fields are provided for convenience and better readability.
       * Filling them in is not required.
       * </pre>
       *
       * <code>.google.protobuf.Int32Value node_id = 1;</code>
       */
      public Builder mergeNodeId(com.google.protobuf.Int32Value value) {
        if (nodeIdBuilder_ == null) {
          if (nodeId_ != null) {
            nodeId_ =
              com.google.protobuf.Int32Value.newBuilder(nodeId_).mergeFrom(value).buildPartial();
          } else {
            nodeId_ = value;
          }
          onChanged();
        } else {
          nodeIdBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * Following fields are provided for convenience and better readability.
       * Filling them in is not required.
       * </pre>
       *
       * <code>.google.protobuf.Int32Value node_id = 1;</code>
       */
      public Builder clearNodeId() {
        if (nodeIdBuilder_ == null) {
          nodeId_ = null;
          onChanged();
        } else {
          nodeId_ = null;
          nodeIdBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * Following fields are provided for convenience and better readability.
       * Filling them in is not required.
       * </pre>
       *
       * <code>.google.protobuf.Int32Value node_id = 1;</code>
       */
      public com.google.protobuf.Int32Value.Builder getNodeIdBuilder() {
        
        onChanged();
        return getNodeIdFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Following fields are provided for convenience and better readability.
       * Filling them in is not required.
       * </pre>
       *
       * <code>.google.protobuf.Int32Value node_id = 1;</code>
       */
      public com.google.protobuf.Int32ValueOrBuilder getNodeIdOrBuilder() {
        if (nodeIdBuilder_ != null) {
          return nodeIdBuilder_.getMessageOrBuilder();
        } else {
          return nodeId_ == null ?
              com.google.protobuf.Int32Value.getDefaultInstance() : nodeId_;
        }
      }
      /**
       * <pre>
       * Following fields are provided for convenience and better readability.
       * Filling them in is not required.
       * </pre>
       *
       * <code>.google.protobuf.Int32Value node_id = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Int32Value, com.google.protobuf.Int32Value.Builder, com.google.protobuf.Int32ValueOrBuilder> 
          getNodeIdFieldBuilder() {
        if (nodeIdBuilder_ == null) {
          nodeIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Int32Value, com.google.protobuf.Int32Value.Builder, com.google.protobuf.Int32ValueOrBuilder>(
                  getNodeId(),
                  getParentForChildren(),
                  isClean());
          nodeId_ = null;
        }
        return nodeIdBuilder_;
      }

      private com.google.protobuf.Int32Value depth_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Int32Value, com.google.protobuf.Int32Value.Builder, com.google.protobuf.Int32ValueOrBuilder> depthBuilder_;
      /**
       * <code>.google.protobuf.Int32Value depth = 2;</code>
       */
      public boolean hasDepth() {
        return depthBuilder_ != null || depth_ != null;
      }
      /**
       * <code>.google.protobuf.Int32Value depth = 2;</code>
       */
      public com.google.protobuf.Int32Value getDepth() {
        if (depthBuilder_ == null) {
          return depth_ == null ? com.google.protobuf.Int32Value.getDefaultInstance() : depth_;
        } else {
          return depthBuilder_.getMessage();
        }
      }
      /**
       * <code>.google.protobuf.Int32Value depth = 2;</code>
       */
      public Builder setDepth(com.google.protobuf.Int32Value value) {
        if (depthBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          depth_ = value;
          onChanged();
        } else {
          depthBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.google.protobuf.Int32Value depth = 2;</code>
       */
      public Builder setDepth(
          com.google.protobuf.Int32Value.Builder builderForValue) {
        if (depthBuilder_ == null) {
          depth_ = builderForValue.build();
          onChanged();
        } else {
          depthBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.google.protobuf.Int32Value depth = 2;</code>
       */
      public Builder mergeDepth(com.google.protobuf.Int32Value value) {
        if (depthBuilder_ == null) {
          if (depth_ != null) {
            depth_ =
              com.google.protobuf.Int32Value.newBuilder(depth_).mergeFrom(value).buildPartial();
          } else {
            depth_ = value;
          }
          onChanged();
        } else {
          depthBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.google.protobuf.Int32Value depth = 2;</code>
       */
      public Builder clearDepth() {
        if (depthBuilder_ == null) {
          depth_ = null;
          onChanged();
        } else {
          depth_ = null;
          depthBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.google.protobuf.Int32Value depth = 2;</code>
       */
      public com.google.protobuf.Int32Value.Builder getDepthBuilder() {
        
        onChanged();
        return getDepthFieldBuilder().getBuilder();
      }
      /**
       * <code>.google.protobuf.Int32Value depth = 2;</code>
       */
      public com.google.protobuf.Int32ValueOrBuilder getDepthOrBuilder() {
        if (depthBuilder_ != null) {
          return depthBuilder_.getMessageOrBuilder();
        } else {
          return depth_ == null ?
              com.google.protobuf.Int32Value.getDefaultInstance() : depth_;
        }
      }
      /**
       * <code>.google.protobuf.Int32Value depth = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Int32Value, com.google.protobuf.Int32Value.Builder, com.google.protobuf.Int32ValueOrBuilder> 
          getDepthFieldBuilder() {
        if (depthBuilder_ == null) {
          depthBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Int32Value, com.google.protobuf.Int32Value.Builder, com.google.protobuf.Int32ValueOrBuilder>(
                  getDepth(),
                  getParentForChildren(),
                  isClean());
          depth_ = null;
        }
        return depthBuilder_;
      }

      private com.google.protobuf.Int32Value subtreeSize_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Int32Value, com.google.protobuf.Int32Value.Builder, com.google.protobuf.Int32ValueOrBuilder> subtreeSizeBuilder_;
      /**
       * <code>.google.protobuf.Int32Value subtree_size = 3;</code>
       */
      public boolean hasSubtreeSize() {
        return subtreeSizeBuilder_ != null || subtreeSize_ != null;
      }
      /**
       * <code>.google.protobuf.Int32Value subtree_size = 3;</code>
       */
      public com.google.protobuf.Int32Value getSubtreeSize() {
        if (subtreeSizeBuilder_ == null) {
          return subtreeSize_ == null ? com.google.protobuf.Int32Value.getDefaultInstance() : subtreeSize_;
        } else {
          return subtreeSizeBuilder_.getMessage();
        }
      }
      /**
       * <code>.google.protobuf.Int32Value subtree_size = 3;</code>
       */
      public Builder setSubtreeSize(com.google.protobuf.Int32Value value) {
        if (subtreeSizeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          subtreeSize_ = value;
          onChanged();
        } else {
          subtreeSizeBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.google.protobuf.Int32Value subtree_size = 3;</code>
       */
      public Builder setSubtreeSize(
          com.google.protobuf.Int32Value.Builder builderForValue) {
        if (subtreeSizeBuilder_ == null) {
          subtreeSize_ = builderForValue.build();
          onChanged();
        } else {
          subtreeSizeBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.google.protobuf.Int32Value subtree_size = 3;</code>
       */
      public Builder mergeSubtreeSize(com.google.protobuf.Int32Value value) {
        if (subtreeSizeBuilder_ == null) {
          if (subtreeSize_ != null) {
            subtreeSize_ =
              com.google.protobuf.Int32Value.newBuilder(subtreeSize_).mergeFrom(value).buildPartial();
          } else {
            subtreeSize_ = value;
          }
          onChanged();
        } else {
          subtreeSizeBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.google.protobuf.Int32Value subtree_size = 3;</code>
       */
      public Builder clearSubtreeSize() {
        if (subtreeSizeBuilder_ == null) {
          subtreeSize_ = null;
          onChanged();
        } else {
          subtreeSize_ = null;
          subtreeSizeBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.google.protobuf.Int32Value subtree_size = 3;</code>
       */
      public com.google.protobuf.Int32Value.Builder getSubtreeSizeBuilder() {
        
        onChanged();
        return getSubtreeSizeFieldBuilder().getBuilder();
      }
      /**
       * <code>.google.protobuf.Int32Value subtree_size = 3;</code>
       */
      public com.google.protobuf.Int32ValueOrBuilder getSubtreeSizeOrBuilder() {
        if (subtreeSizeBuilder_ != null) {
          return subtreeSizeBuilder_.getMessageOrBuilder();
        } else {
          return subtreeSize_ == null ?
              com.google.protobuf.Int32Value.getDefaultInstance() : subtreeSize_;
        }
      }
      /**
       * <code>.google.protobuf.Int32Value subtree_size = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Int32Value, com.google.protobuf.Int32Value.Builder, com.google.protobuf.Int32ValueOrBuilder> 
          getSubtreeSizeFieldBuilder() {
        if (subtreeSizeBuilder_ == null) {
          subtreeSizeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Int32Value, com.google.protobuf.Int32Value.Builder, com.google.protobuf.Int32ValueOrBuilder>(
                  getSubtreeSize(),
                  getParentForChildren(),
                  isClean());
          subtreeSize_ = null;
        }
        return subtreeSizeBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.BinaryNode, tensorflow.decision_trees.GenericTreeModel.BinaryNode.Builder, tensorflow.decision_trees.GenericTreeModel.BinaryNodeOrBuilder> binaryNodeBuilder_;
      /**
       * <code>.tensorflow.decision_trees.BinaryNode binary_node = 4;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.BinaryNode getBinaryNode() {
        if (binaryNodeBuilder_ == null) {
          if (nodeTypeCase_ == 4) {
            return (tensorflow.decision_trees.GenericTreeModel.BinaryNode) nodeType_;
          }
          return tensorflow.decision_trees.GenericTreeModel.BinaryNode.getDefaultInstance();
        } else {
          if (nodeTypeCase_ == 4) {
            return binaryNodeBuilder_.getMessage();
          }
          return tensorflow.decision_trees.GenericTreeModel.BinaryNode.getDefaultInstance();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.BinaryNode binary_node = 4;</code>
       */
      public Builder setBinaryNode(tensorflow.decision_trees.GenericTreeModel.BinaryNode value) {
        if (binaryNodeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          nodeType_ = value;
          onChanged();
        } else {
          binaryNodeBuilder_.setMessage(value);
        }
        nodeTypeCase_ = 4;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.BinaryNode binary_node = 4;</code>
       */
      public Builder setBinaryNode(
          tensorflow.decision_trees.GenericTreeModel.BinaryNode.Builder builderForValue) {
        if (binaryNodeBuilder_ == null) {
          nodeType_ = builderForValue.build();
          onChanged();
        } else {
          binaryNodeBuilder_.setMessage(builderForValue.build());
        }
        nodeTypeCase_ = 4;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.BinaryNode binary_node = 4;</code>
       */
      public Builder mergeBinaryNode(tensorflow.decision_trees.GenericTreeModel.BinaryNode value) {
        if (binaryNodeBuilder_ == null) {
          if (nodeTypeCase_ == 4 &&
              nodeType_ != tensorflow.decision_trees.GenericTreeModel.BinaryNode.getDefaultInstance()) {
            nodeType_ = tensorflow.decision_trees.GenericTreeModel.BinaryNode.newBuilder((tensorflow.decision_trees.GenericTreeModel.BinaryNode) nodeType_)
                .mergeFrom(value).buildPartial();
          } else {
            nodeType_ = value;
          }
          onChanged();
        } else {
          if (nodeTypeCase_ == 4) {
            binaryNodeBuilder_.mergeFrom(value);
          }
          binaryNodeBuilder_.setMessage(value);
        }
        nodeTypeCase_ = 4;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.BinaryNode binary_node = 4;</code>
       */
      public Builder clearBinaryNode() {
        if (binaryNodeBuilder_ == null) {
          if (nodeTypeCase_ == 4) {
            nodeTypeCase_ = 0;
            nodeType_ = null;
            onChanged();
          }
        } else {
          if (nodeTypeCase_ == 4) {
            nodeTypeCase_ = 0;
            nodeType_ = null;
          }
          binaryNodeBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.BinaryNode binary_node = 4;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.BinaryNode.Builder getBinaryNodeBuilder() {
        return getBinaryNodeFieldBuilder().getBuilder();
      }
      /**
       * <code>.tensorflow.decision_trees.BinaryNode binary_node = 4;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.BinaryNodeOrBuilder getBinaryNodeOrBuilder() {
        if ((nodeTypeCase_ == 4) && (binaryNodeBuilder_ != null)) {
          return binaryNodeBuilder_.getMessageOrBuilder();
        } else {
          if (nodeTypeCase_ == 4) {
            return (tensorflow.decision_trees.GenericTreeModel.BinaryNode) nodeType_;
          }
          return tensorflow.decision_trees.GenericTreeModel.BinaryNode.getDefaultInstance();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.BinaryNode binary_node = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.BinaryNode, tensorflow.decision_trees.GenericTreeModel.BinaryNode.Builder, tensorflow.decision_trees.GenericTreeModel.BinaryNodeOrBuilder> 
          getBinaryNodeFieldBuilder() {
        if (binaryNodeBuilder_ == null) {
          if (!(nodeTypeCase_ == 4)) {
            nodeType_ = tensorflow.decision_trees.GenericTreeModel.BinaryNode.getDefaultInstance();
          }
          binaryNodeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              tensorflow.decision_trees.GenericTreeModel.BinaryNode, tensorflow.decision_trees.GenericTreeModel.BinaryNode.Builder, tensorflow.decision_trees.GenericTreeModel.BinaryNodeOrBuilder>(
                  (tensorflow.decision_trees.GenericTreeModel.BinaryNode) nodeType_,
                  getParentForChildren(),
                  isClean());
          nodeType_ = null;
        }
        nodeTypeCase_ = 4;
        onChanged();;
        return binaryNodeBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.Leaf, tensorflow.decision_trees.GenericTreeModel.Leaf.Builder, tensorflow.decision_trees.GenericTreeModel.LeafOrBuilder> leafBuilder_;
      /**
       * <code>.tensorflow.decision_trees.Leaf leaf = 5;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Leaf getLeaf() {
        if (leafBuilder_ == null) {
          if (nodeTypeCase_ == 5) {
            return (tensorflow.decision_trees.GenericTreeModel.Leaf) nodeType_;
          }
          return tensorflow.decision_trees.GenericTreeModel.Leaf.getDefaultInstance();
        } else {
          if (nodeTypeCase_ == 5) {
            return leafBuilder_.getMessage();
          }
          return tensorflow.decision_trees.GenericTreeModel.Leaf.getDefaultInstance();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.Leaf leaf = 5;</code>
       */
      public Builder setLeaf(tensorflow.decision_trees.GenericTreeModel.Leaf value) {
        if (leafBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          nodeType_ = value;
          onChanged();
        } else {
          leafBuilder_.setMessage(value);
        }
        nodeTypeCase_ = 5;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Leaf leaf = 5;</code>
       */
      public Builder setLeaf(
          tensorflow.decision_trees.GenericTreeModel.Leaf.Builder builderForValue) {
        if (leafBuilder_ == null) {
          nodeType_ = builderForValue.build();
          onChanged();
        } else {
          leafBuilder_.setMessage(builderForValue.build());
        }
        nodeTypeCase_ = 5;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Leaf leaf = 5;</code>
       */
      public Builder mergeLeaf(tensorflow.decision_trees.GenericTreeModel.Leaf value) {
        if (leafBuilder_ == null) {
          if (nodeTypeCase_ == 5 &&
              nodeType_ != tensorflow.decision_trees.GenericTreeModel.Leaf.getDefaultInstance()) {
            nodeType_ = tensorflow.decision_trees.GenericTreeModel.Leaf.newBuilder((tensorflow.decision_trees.GenericTreeModel.Leaf) nodeType_)
                .mergeFrom(value).buildPartial();
          } else {
            nodeType_ = value;
          }
          onChanged();
        } else {
          if (nodeTypeCase_ == 5) {
            leafBuilder_.mergeFrom(value);
          }
          leafBuilder_.setMessage(value);
        }
        nodeTypeCase_ = 5;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Leaf leaf = 5;</code>
       */
      public Builder clearLeaf() {
        if (leafBuilder_ == null) {
          if (nodeTypeCase_ == 5) {
            nodeTypeCase_ = 0;
            nodeType_ = null;
            onChanged();
          }
        } else {
          if (nodeTypeCase_ == 5) {
            nodeTypeCase_ = 0;
            nodeType_ = null;
          }
          leafBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Leaf leaf = 5;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Leaf.Builder getLeafBuilder() {
        return getLeafFieldBuilder().getBuilder();
      }
      /**
       * <code>.tensorflow.decision_trees.Leaf leaf = 5;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.LeafOrBuilder getLeafOrBuilder() {
        if ((nodeTypeCase_ == 5) && (leafBuilder_ != null)) {
          return leafBuilder_.getMessageOrBuilder();
        } else {
          if (nodeTypeCase_ == 5) {
            return (tensorflow.decision_trees.GenericTreeModel.Leaf) nodeType_;
          }
          return tensorflow.decision_trees.GenericTreeModel.Leaf.getDefaultInstance();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.Leaf leaf = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.Leaf, tensorflow.decision_trees.GenericTreeModel.Leaf.Builder, tensorflow.decision_trees.GenericTreeModel.LeafOrBuilder> 
          getLeafFieldBuilder() {
        if (leafBuilder_ == null) {
          if (!(nodeTypeCase_ == 5)) {
            nodeType_ = tensorflow.decision_trees.GenericTreeModel.Leaf.getDefaultInstance();
          }
          leafBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              tensorflow.decision_trees.GenericTreeModel.Leaf, tensorflow.decision_trees.GenericTreeModel.Leaf.Builder, tensorflow.decision_trees.GenericTreeModel.LeafOrBuilder>(
                  (tensorflow.decision_trees.GenericTreeModel.Leaf) nodeType_,
                  getParentForChildren(),
                  isClean());
          nodeType_ = null;
        }
        nodeTypeCase_ = 5;
        onChanged();;
        return leafBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> customNodeTypeBuilder_;
      /**
       * <code>.google.protobuf.Any custom_node_type = 6;</code>
       */
      public com.google.protobuf.Any getCustomNodeType() {
        if (customNodeTypeBuilder_ == null) {
          if (nodeTypeCase_ == 6) {
            return (com.google.protobuf.Any) nodeType_;
          }
          return com.google.protobuf.Any.getDefaultInstance();
        } else {
          if (nodeTypeCase_ == 6) {
            return customNodeTypeBuilder_.getMessage();
          }
          return com.google.protobuf.Any.getDefaultInstance();
        }
      }
      /**
       * <code>.google.protobuf.Any custom_node_type = 6;</code>
       */
      public Builder setCustomNodeType(com.google.protobuf.Any value) {
        if (customNodeTypeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          nodeType_ = value;
          onChanged();
        } else {
          customNodeTypeBuilder_.setMessage(value);
        }
        nodeTypeCase_ = 6;
        return this;
      }
      /**
       * <code>.google.protobuf.Any custom_node_type = 6;</code>
       */
      public Builder setCustomNodeType(
          com.google.protobuf.Any.Builder builderForValue) {
        if (customNodeTypeBuilder_ == null) {
          nodeType_ = builderForValue.build();
          onChanged();
        } else {
          customNodeTypeBuilder_.setMessage(builderForValue.build());
        }
        nodeTypeCase_ = 6;
        return this;
      }
      /**
       * <code>.google.protobuf.Any custom_node_type = 6;</code>
       */
      public Builder mergeCustomNodeType(com.google.protobuf.Any value) {
        if (customNodeTypeBuilder_ == null) {
          if (nodeTypeCase_ == 6 &&
              nodeType_ != com.google.protobuf.Any.getDefaultInstance()) {
            nodeType_ = com.google.protobuf.Any.newBuilder((com.google.protobuf.Any) nodeType_)
                .mergeFrom(value).buildPartial();
          } else {
            nodeType_ = value;
          }
          onChanged();
        } else {
          if (nodeTypeCase_ == 6) {
            customNodeTypeBuilder_.mergeFrom(value);
          }
          customNodeTypeBuilder_.setMessage(value);
        }
        nodeTypeCase_ = 6;
        return this;
      }
      /**
       * <code>.google.protobuf.Any custom_node_type = 6;</code>
       */
      public Builder clearCustomNodeType() {
        if (customNodeTypeBuilder_ == null) {
          if (nodeTypeCase_ == 6) {
            nodeTypeCase_ = 0;
            nodeType_ = null;
            onChanged();
          }
        } else {
          if (nodeTypeCase_ == 6) {
            nodeTypeCase_ = 0;
            nodeType_ = null;
          }
          customNodeTypeBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>.google.protobuf.Any custom_node_type = 6;</code>
       */
      public com.google.protobuf.Any.Builder getCustomNodeTypeBuilder() {
        return getCustomNodeTypeFieldBuilder().getBuilder();
      }
      /**
       * <code>.google.protobuf.Any custom_node_type = 6;</code>
       */
      public com.google.protobuf.AnyOrBuilder getCustomNodeTypeOrBuilder() {
        if ((nodeTypeCase_ == 6) && (customNodeTypeBuilder_ != null)) {
          return customNodeTypeBuilder_.getMessageOrBuilder();
        } else {
          if (nodeTypeCase_ == 6) {
            return (com.google.protobuf.Any) nodeType_;
          }
          return com.google.protobuf.Any.getDefaultInstance();
        }
      }
      /**
       * <code>.google.protobuf.Any custom_node_type = 6;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> 
          getCustomNodeTypeFieldBuilder() {
        if (customNodeTypeBuilder_ == null) {
          if (!(nodeTypeCase_ == 6)) {
            nodeType_ = com.google.protobuf.Any.getDefaultInstance();
          }
          customNodeTypeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder>(
                  (com.google.protobuf.Any) nodeType_,
                  getParentForChildren(),
                  isClean());
          nodeType_ = null;
        }
        nodeTypeCase_ = 6;
        onChanged();;
        return customNodeTypeBuilder_;
      }

      private java.util.List<com.google.protobuf.Any> additionalData_ =
        java.util.Collections.emptyList();
      private void ensureAdditionalDataIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>(additionalData_);
          bitField0_ |= 0x00000040;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> additionalDataBuilder_;

      /**
       * <code>repeated .google.protobuf.Any additional_data = 7;</code>
       */
      public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
        if (additionalDataBuilder_ == null) {
          return java.util.Collections.unmodifiableList(additionalData_);
        } else {
          return additionalDataBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 7;</code>
       */
      public int getAdditionalDataCount() {
        if (additionalDataBuilder_ == null) {
          return additionalData_.size();
        } else {
          return additionalDataBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 7;</code>
       */
      public com.google.protobuf.Any getAdditionalData(int index) {
        if (additionalDataBuilder_ == null) {
          return additionalData_.get(index);
        } else {
          return additionalDataBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 7;</code>
       */
      public Builder setAdditionalData(
          int index, com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.set(index, value);
          onChanged();
        } else {
          additionalDataBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 7;</code>
       */
      public Builder setAdditionalData(
          int index, com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.set(index, builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 7;</code>
       */
      public Builder addAdditionalData(com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.add(value);
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 7;</code>
       */
      public Builder addAdditionalData(
          int index, com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.add(index, value);
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 7;</code>
       */
      public Builder addAdditionalData(
          com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.add(builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 7;</code>
       */
      public Builder addAdditionalData(
          int index, com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.add(index, builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 7;</code>
       */
      public Builder addAllAdditionalData(
          java.lang.Iterable<? extends com.google.protobuf.Any> values) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, additionalData_);
          onChanged();
        } else {
          additionalDataBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 7;</code>
       */
      public Builder clearAdditionalData() {
        if (additionalDataBuilder_ == null) {
          additionalData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          additionalDataBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 7;</code>
       */
      public Builder removeAdditionalData(int index) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.remove(index);
          onChanged();
        } else {
          additionalDataBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 7;</code>
       */
      public com.google.protobuf.Any.Builder getAdditionalDataBuilder(
          int index) {
        return getAdditionalDataFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 7;</code>
       */
      public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
          int index) {
        if (additionalDataBuilder_ == null) {
          return additionalData_.get(index);  } else {
          return additionalDataBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 7;</code>
       */
      public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
           getAdditionalDataOrBuilderList() {
        if (additionalDataBuilder_ != null) {
          return additionalDataBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(additionalData_);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 7;</code>
       */
      public com.google.protobuf.Any.Builder addAdditionalDataBuilder() {
        return getAdditionalDataFieldBuilder().addBuilder(
            com.google.protobuf.Any.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 7;</code>
       */
      public com.google.protobuf.Any.Builder addAdditionalDataBuilder(
          int index) {
        return getAdditionalDataFieldBuilder().addBuilder(
            index, com.google.protobuf.Any.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 7;</code>
       */
      public java.util.List<com.google.protobuf.Any.Builder> 
           getAdditionalDataBuilderList() {
        return getAdditionalDataFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> 
          getAdditionalDataFieldBuilder() {
        if (additionalDataBuilder_ == null) {
          additionalDataBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder>(
                  additionalData_,
                  ((bitField0_ & 0x00000040) == 0x00000040),
                  getParentForChildren(),
                  isClean());
          additionalData_ = null;
        }
        return additionalDataBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.decision_trees.TreeNode)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.decision_trees.TreeNode)
    private static final tensorflow.decision_trees.GenericTreeModel.TreeNode DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.decision_trees.GenericTreeModel.TreeNode();
    }

    public static tensorflow.decision_trees.GenericTreeModel.TreeNode getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public tensorflow.decision_trees.GenericTreeModel.TreeNode getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface BinaryNodeOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.decision_trees.BinaryNode)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.google.protobuf.Int32Value left_child_id = 1;</code>
     */
    boolean hasLeftChildId();
    /**
     * <code>.google.protobuf.Int32Value left_child_id = 1;</code>
     */
    com.google.protobuf.Int32Value getLeftChildId();
    /**
     * <code>.google.protobuf.Int32Value left_child_id = 1;</code>
     */
    com.google.protobuf.Int32ValueOrBuilder getLeftChildIdOrBuilder();

    /**
     * <code>.google.protobuf.Int32Value right_child_id = 2;</code>
     */
    boolean hasRightChildId();
    /**
     * <code>.google.protobuf.Int32Value right_child_id = 2;</code>
     */
    com.google.protobuf.Int32Value getRightChildId();
    /**
     * <code>.google.protobuf.Int32Value right_child_id = 2;</code>
     */
    com.google.protobuf.Int32ValueOrBuilder getRightChildIdOrBuilder();

    /**
     * <pre>
     * When left_child_test is undefined for a particular datapoint (e.g. because
     * it's not defined when feature value is missing), the datapoint should go
     * in this direction.
     * </pre>
     *
     * <code>.tensorflow.decision_trees.BinaryNode.Direction default_direction = 3;</code>
     */
    int getDefaultDirectionValue();
    /**
     * <pre>
     * When left_child_test is undefined for a particular datapoint (e.g. because
     * it's not defined when feature value is missing), the datapoint should go
     * in this direction.
     * </pre>
     *
     * <code>.tensorflow.decision_trees.BinaryNode.Direction default_direction = 3;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.BinaryNode.Direction getDefaultDirection();

    /**
     * <code>.tensorflow.decision_trees.InequalityTest inequality_left_child_test = 4;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.InequalityTest getInequalityLeftChildTest();
    /**
     * <code>.tensorflow.decision_trees.InequalityTest inequality_left_child_test = 4;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.InequalityTestOrBuilder getInequalityLeftChildTestOrBuilder();

    /**
     * <code>.google.protobuf.Any custom_left_child_test = 5;</code>
     */
    com.google.protobuf.Any getCustomLeftChildTest();
    /**
     * <code>.google.protobuf.Any custom_left_child_test = 5;</code>
     */
    com.google.protobuf.AnyOrBuilder getCustomLeftChildTestOrBuilder();

    public tensorflow.decision_trees.GenericTreeModel.BinaryNode.LeftChildTestCase getLeftChildTestCase();
  }
  /**
   * Protobuf type {@code tensorflow.decision_trees.BinaryNode}
   */
  public  static final class BinaryNode extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.decision_trees.BinaryNode)
      BinaryNodeOrBuilder {
    // Use BinaryNode.newBuilder() to construct.
    private BinaryNode(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private BinaryNode() {
      defaultDirection_ = 0;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private BinaryNode(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.Int32Value.Builder subBuilder = null;
              if (leftChildId_ != null) {
                subBuilder = leftChildId_.toBuilder();
              }
              leftChildId_ = input.readMessage(com.google.protobuf.Int32Value.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(leftChildId_);
                leftChildId_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              com.google.protobuf.Int32Value.Builder subBuilder = null;
              if (rightChildId_ != null) {
                subBuilder = rightChildId_.toBuilder();
              }
              rightChildId_ = input.readMessage(com.google.protobuf.Int32Value.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(rightChildId_);
                rightChildId_ = subBuilder.buildPartial();
              }

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

              defaultDirection_ = rawValue;
              break;
            }
            case 34: {
              tensorflow.decision_trees.GenericTreeModel.InequalityTest.Builder subBuilder = null;
              if (leftChildTestCase_ == 4) {
                subBuilder = ((tensorflow.decision_trees.GenericTreeModel.InequalityTest) leftChildTest_).toBuilder();
              }
              leftChildTest_ =
                  input.readMessage(tensorflow.decision_trees.GenericTreeModel.InequalityTest.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((tensorflow.decision_trees.GenericTreeModel.InequalityTest) leftChildTest_);
                leftChildTest_ = subBuilder.buildPartial();
              }
              leftChildTestCase_ = 4;
              break;
            }
            case 42: {
              com.google.protobuf.Any.Builder subBuilder = null;
              if (leftChildTestCase_ == 5) {
                subBuilder = ((com.google.protobuf.Any) leftChildTest_).toBuilder();
              }
              leftChildTest_ =
                  input.readMessage(com.google.protobuf.Any.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((com.google.protobuf.Any) leftChildTest_);
                leftChildTest_ = subBuilder.buildPartial();
              }
              leftChildTestCase_ = 5;
              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_BinaryNode_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_BinaryNode_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.decision_trees.GenericTreeModel.BinaryNode.class, tensorflow.decision_trees.GenericTreeModel.BinaryNode.Builder.class);
    }

    /**
     * Protobuf enum {@code tensorflow.decision_trees.BinaryNode.Direction}
     */
    public enum Direction
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>LEFT = 0;</code>
       */
      LEFT(0),
      /**
       * <code>RIGHT = 1;</code>
       */
      RIGHT(1),
      UNRECOGNIZED(-1),
      ;

      /**
       * <code>LEFT = 0;</code>
       */
      public static final int LEFT_VALUE = 0;
      /**
       * <code>RIGHT = 1;</code>
       */
      public static final int RIGHT_VALUE = 1;


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

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

      public static Direction forNumber(int value) {
        switch (value) {
          case 0: return LEFT;
          case 1: return RIGHT;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return tensorflow.decision_trees.GenericTreeModel.BinaryNode.getDescriptor().getEnumTypes().get(0);
      }

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

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

      private final int value;

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

      // @@protoc_insertion_point(enum_scope:tensorflow.decision_trees.BinaryNode.Direction)
    }

    private int leftChildTestCase_ = 0;
    private java.lang.Object leftChildTest_;
    public enum LeftChildTestCase
        implements com.google.protobuf.Internal.EnumLite {
      INEQUALITY_LEFT_CHILD_TEST(4),
      CUSTOM_LEFT_CHILD_TEST(5),
      LEFTCHILDTEST_NOT_SET(0);
      private final int value;
      private LeftChildTestCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static LeftChildTestCase valueOf(int value) {
        return forNumber(value);
      }

      public static LeftChildTestCase forNumber(int value) {
        switch (value) {
          case 4: return INEQUALITY_LEFT_CHILD_TEST;
          case 5: return CUSTOM_LEFT_CHILD_TEST;
          case 0: return LEFTCHILDTEST_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public LeftChildTestCase
    getLeftChildTestCase() {
      return LeftChildTestCase.forNumber(
          leftChildTestCase_);
    }

    public static final int LEFT_CHILD_ID_FIELD_NUMBER = 1;
    private com.google.protobuf.Int32Value leftChildId_;
    /**
     * <code>.google.protobuf.Int32Value left_child_id = 1;</code>
     */
    public boolean hasLeftChildId() {
      return leftChildId_ != null;
    }
    /**
     * <code>.google.protobuf.Int32Value left_child_id = 1;</code>
     */
    public com.google.protobuf.Int32Value getLeftChildId() {
      return leftChildId_ == null ? com.google.protobuf.Int32Value.getDefaultInstance() : leftChildId_;
    }
    /**
     * <code>.google.protobuf.Int32Value left_child_id = 1;</code>
     */
    public com.google.protobuf.Int32ValueOrBuilder getLeftChildIdOrBuilder() {
      return getLeftChildId();
    }

    public static final int RIGHT_CHILD_ID_FIELD_NUMBER = 2;
    private com.google.protobuf.Int32Value rightChildId_;
    /**
     * <code>.google.protobuf.Int32Value right_child_id = 2;</code>
     */
    public boolean hasRightChildId() {
      return rightChildId_ != null;
    }
    /**
     * <code>.google.protobuf.Int32Value right_child_id = 2;</code>
     */
    public com.google.protobuf.Int32Value getRightChildId() {
      return rightChildId_ == null ? com.google.protobuf.Int32Value.getDefaultInstance() : rightChildId_;
    }
    /**
     * <code>.google.protobuf.Int32Value right_child_id = 2;</code>
     */
    public com.google.protobuf.Int32ValueOrBuilder getRightChildIdOrBuilder() {
      return getRightChildId();
    }

    public static final int DEFAULT_DIRECTION_FIELD_NUMBER = 3;
    private int defaultDirection_;
    /**
     * <pre>
     * When left_child_test is undefined for a particular datapoint (e.g. because
     * it's not defined when feature value is missing), the datapoint should go
     * in this direction.
     * </pre>
     *
     * <code>.tensorflow.decision_trees.BinaryNode.Direction default_direction = 3;</code>
     */
    public int getDefaultDirectionValue() {
      return defaultDirection_;
    }
    /**
     * <pre>
     * When left_child_test is undefined for a particular datapoint (e.g. because
     * it's not defined when feature value is missing), the datapoint should go
     * in this direction.
     * </pre>
     *
     * <code>.tensorflow.decision_trees.BinaryNode.Direction default_direction = 3;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.BinaryNode.Direction getDefaultDirection() {
      tensorflow.decision_trees.GenericTreeModel.BinaryNode.Direction result = tensorflow.decision_trees.GenericTreeModel.BinaryNode.Direction.valueOf(defaultDirection_);
      return result == null ? tensorflow.decision_trees.GenericTreeModel.BinaryNode.Direction.UNRECOGNIZED : result;
    }

    public static final int INEQUALITY_LEFT_CHILD_TEST_FIELD_NUMBER = 4;
    /**
     * <code>.tensorflow.decision_trees.InequalityTest inequality_left_child_test = 4;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.InequalityTest getInequalityLeftChildTest() {
      if (leftChildTestCase_ == 4) {
         return (tensorflow.decision_trees.GenericTreeModel.InequalityTest) leftChildTest_;
      }
      return tensorflow.decision_trees.GenericTreeModel.InequalityTest.getDefaultInstance();
    }
    /**
     * <code>.tensorflow.decision_trees.InequalityTest inequality_left_child_test = 4;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.InequalityTestOrBuilder getInequalityLeftChildTestOrBuilder() {
      if (leftChildTestCase_ == 4) {
         return (tensorflow.decision_trees.GenericTreeModel.InequalityTest) leftChildTest_;
      }
      return tensorflow.decision_trees.GenericTreeModel.InequalityTest.getDefaultInstance();
    }

    public static final int CUSTOM_LEFT_CHILD_TEST_FIELD_NUMBER = 5;
    /**
     * <code>.google.protobuf.Any custom_left_child_test = 5;</code>
     */
    public com.google.protobuf.Any getCustomLeftChildTest() {
      if (leftChildTestCase_ == 5) {
         return (com.google.protobuf.Any) leftChildTest_;
      }
      return com.google.protobuf.Any.getDefaultInstance();
    }
    /**
     * <code>.google.protobuf.Any custom_left_child_test = 5;</code>
     */
    public com.google.protobuf.AnyOrBuilder getCustomLeftChildTestOrBuilder() {
      if (leftChildTestCase_ == 5) {
         return (com.google.protobuf.Any) leftChildTest_;
      }
      return com.google.protobuf.Any.getDefaultInstance();
    }

    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 (leftChildId_ != null) {
        output.writeMessage(1, getLeftChildId());
      }
      if (rightChildId_ != null) {
        output.writeMessage(2, getRightChildId());
      }
      if (defaultDirection_ != tensorflow.decision_trees.GenericTreeModel.BinaryNode.Direction.LEFT.getNumber()) {
        output.writeEnum(3, defaultDirection_);
      }
      if (leftChildTestCase_ == 4) {
        output.writeMessage(4, (tensorflow.decision_trees.GenericTreeModel.InequalityTest) leftChildTest_);
      }
      if (leftChildTestCase_ == 5) {
        output.writeMessage(5, (com.google.protobuf.Any) leftChildTest_);
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (leftChildId_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getLeftChildId());
      }
      if (rightChildId_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getRightChildId());
      }
      if (defaultDirection_ != tensorflow.decision_trees.GenericTreeModel.BinaryNode.Direction.LEFT.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, defaultDirection_);
      }
      if (leftChildTestCase_ == 4) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, (tensorflow.decision_trees.GenericTreeModel.InequalityTest) leftChildTest_);
      }
      if (leftChildTestCase_ == 5) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, (com.google.protobuf.Any) leftChildTest_);
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.decision_trees.GenericTreeModel.BinaryNode)) {
        return super.equals(obj);
      }
      tensorflow.decision_trees.GenericTreeModel.BinaryNode other = (tensorflow.decision_trees.GenericTreeModel.BinaryNode) obj;

      boolean result = true;
      result = result && (hasLeftChildId() == other.hasLeftChildId());
      if (hasLeftChildId()) {
        result = result && getLeftChildId()
            .equals(other.getLeftChildId());
      }
      result = result && (hasRightChildId() == other.hasRightChildId());
      if (hasRightChildId()) {
        result = result && getRightChildId()
            .equals(other.getRightChildId());
      }
      result = result && defaultDirection_ == other.defaultDirection_;
      result = result && getLeftChildTestCase().equals(
          other.getLeftChildTestCase());
      if (!result) return false;
      switch (leftChildTestCase_) {
        case 4:
          result = result && getInequalityLeftChildTest()
              .equals(other.getInequalityLeftChildTest());
          break;
        case 5:
          result = result && getCustomLeftChildTest()
              .equals(other.getCustomLeftChildTest());
          break;
        case 0:
        default:
      }
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasLeftChildId()) {
        hash = (37 * hash) + LEFT_CHILD_ID_FIELD_NUMBER;
        hash = (53 * hash) + getLeftChildId().hashCode();
      }
      if (hasRightChildId()) {
        hash = (37 * hash) + RIGHT_CHILD_ID_FIELD_NUMBER;
        hash = (53 * hash) + getRightChildId().hashCode();
      }
      hash = (37 * hash) + DEFAULT_DIRECTION_FIELD_NUMBER;
      hash = (53 * hash) + defaultDirection_;
      switch (leftChildTestCase_) {
        case 4:
          hash = (37 * hash) + INEQUALITY_LEFT_CHILD_TEST_FIELD_NUMBER;
          hash = (53 * hash) + getInequalityLeftChildTest().hashCode();
          break;
        case 5:
          hash = (37 * hash) + CUSTOM_LEFT_CHILD_TEST_FIELD_NUMBER;
          hash = (53 * hash) + getCustomLeftChildTest().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.decision_trees.GenericTreeModel.BinaryNode parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.BinaryNode parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.BinaryNode parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.BinaryNode parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.BinaryNode parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.BinaryNode 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 tensorflow.decision_trees.GenericTreeModel.BinaryNode parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.BinaryNode 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 tensorflow.decision_trees.GenericTreeModel.BinaryNode parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.BinaryNode 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(tensorflow.decision_trees.GenericTreeModel.BinaryNode 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;
    }
    /**
     * Protobuf type {@code tensorflow.decision_trees.BinaryNode}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.decision_trees.BinaryNode)
        tensorflow.decision_trees.GenericTreeModel.BinaryNodeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_BinaryNode_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_BinaryNode_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.decision_trees.GenericTreeModel.BinaryNode.class, tensorflow.decision_trees.GenericTreeModel.BinaryNode.Builder.class);
      }

      // Construct using tensorflow.decision_trees.GenericTreeModel.BinaryNode.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();
        if (leftChildIdBuilder_ == null) {
          leftChildId_ = null;
        } else {
          leftChildId_ = null;
          leftChildIdBuilder_ = null;
        }
        if (rightChildIdBuilder_ == null) {
          rightChildId_ = null;
        } else {
          rightChildId_ = null;
          rightChildIdBuilder_ = null;
        }
        defaultDirection_ = 0;

        leftChildTestCase_ = 0;
        leftChildTest_ = null;
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_BinaryNode_descriptor;
      }

      public tensorflow.decision_trees.GenericTreeModel.BinaryNode getDefaultInstanceForType() {
        return tensorflow.decision_trees.GenericTreeModel.BinaryNode.getDefaultInstance();
      }

      public tensorflow.decision_trees.GenericTreeModel.BinaryNode build() {
        tensorflow.decision_trees.GenericTreeModel.BinaryNode result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.decision_trees.GenericTreeModel.BinaryNode buildPartial() {
        tensorflow.decision_trees.GenericTreeModel.BinaryNode result = new tensorflow.decision_trees.GenericTreeModel.BinaryNode(this);
        if (leftChildIdBuilder_ == null) {
          result.leftChildId_ = leftChildId_;
        } else {
          result.leftChildId_ = leftChildIdBuilder_.build();
        }
        if (rightChildIdBuilder_ == null) {
          result.rightChildId_ = rightChildId_;
        } else {
          result.rightChildId_ = rightChildIdBuilder_.build();
        }
        result.defaultDirection_ = defaultDirection_;
        if (leftChildTestCase_ == 4) {
          if (inequalityLeftChildTestBuilder_ == null) {
            result.leftChildTest_ = leftChildTest_;
          } else {
            result.leftChildTest_ = inequalityLeftChildTestBuilder_.build();
          }
        }
        if (leftChildTestCase_ == 5) {
          if (customLeftChildTestBuilder_ == null) {
            result.leftChildTest_ = leftChildTest_;
          } else {
            result.leftChildTest_ = customLeftChildTestBuilder_.build();
          }
        }
        result.leftChildTestCase_ = leftChildTestCase_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          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, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.decision_trees.GenericTreeModel.BinaryNode) {
          return mergeFrom((tensorflow.decision_trees.GenericTreeModel.BinaryNode)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.decision_trees.GenericTreeModel.BinaryNode other) {
        if (other == tensorflow.decision_trees.GenericTreeModel.BinaryNode.getDefaultInstance()) return this;
        if (other.hasLeftChildId()) {
          mergeLeftChildId(other.getLeftChildId());
        }
        if (other.hasRightChildId()) {
          mergeRightChildId(other.getRightChildId());
        }
        if (other.defaultDirection_ != 0) {
          setDefaultDirectionValue(other.getDefaultDirectionValue());
        }
        switch (other.getLeftChildTestCase()) {
          case INEQUALITY_LEFT_CHILD_TEST: {
            mergeInequalityLeftChildTest(other.getInequalityLeftChildTest());
            break;
          }
          case CUSTOM_LEFT_CHILD_TEST: {
            mergeCustomLeftChildTest(other.getCustomLeftChildTest());
            break;
          }
          case LEFTCHILDTEST_NOT_SET: {
            break;
          }
        }
        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 {
        tensorflow.decision_trees.GenericTreeModel.BinaryNode parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.decision_trees.GenericTreeModel.BinaryNode) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int leftChildTestCase_ = 0;
      private java.lang.Object leftChildTest_;
      public LeftChildTestCase
          getLeftChildTestCase() {
        return LeftChildTestCase.forNumber(
            leftChildTestCase_);
      }

      public Builder clearLeftChildTest() {
        leftChildTestCase_ = 0;
        leftChildTest_ = null;
        onChanged();
        return this;
      }


      private com.google.protobuf.Int32Value leftChildId_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Int32Value, com.google.protobuf.Int32Value.Builder, com.google.protobuf.Int32ValueOrBuilder> leftChildIdBuilder_;
      /**
       * <code>.google.protobuf.Int32Value left_child_id = 1;</code>
       */
      public boolean hasLeftChildId() {
        return leftChildIdBuilder_ != null || leftChildId_ != null;
      }
      /**
       * <code>.google.protobuf.Int32Value left_child_id = 1;</code>
       */
      public com.google.protobuf.Int32Value getLeftChildId() {
        if (leftChildIdBuilder_ == null) {
          return leftChildId_ == null ? com.google.protobuf.Int32Value.getDefaultInstance() : leftChildId_;
        } else {
          return leftChildIdBuilder_.getMessage();
        }
      }
      /**
       * <code>.google.protobuf.Int32Value left_child_id = 1;</code>
       */
      public Builder setLeftChildId(com.google.protobuf.Int32Value value) {
        if (leftChildIdBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          leftChildId_ = value;
          onChanged();
        } else {
          leftChildIdBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.google.protobuf.Int32Value left_child_id = 1;</code>
       */
      public Builder setLeftChildId(
          com.google.protobuf.Int32Value.Builder builderForValue) {
        if (leftChildIdBuilder_ == null) {
          leftChildId_ = builderForValue.build();
          onChanged();
        } else {
          leftChildIdBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.google.protobuf.Int32Value left_child_id = 1;</code>
       */
      public Builder mergeLeftChildId(com.google.protobuf.Int32Value value) {
        if (leftChildIdBuilder_ == null) {
          if (leftChildId_ != null) {
            leftChildId_ =
              com.google.protobuf.Int32Value.newBuilder(leftChildId_).mergeFrom(value).buildPartial();
          } else {
            leftChildId_ = value;
          }
          onChanged();
        } else {
          leftChildIdBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.google.protobuf.Int32Value left_child_id = 1;</code>
       */
      public Builder clearLeftChildId() {
        if (leftChildIdBuilder_ == null) {
          leftChildId_ = null;
          onChanged();
        } else {
          leftChildId_ = null;
          leftChildIdBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.google.protobuf.Int32Value left_child_id = 1;</code>
       */
      public com.google.protobuf.Int32Value.Builder getLeftChildIdBuilder() {
        
        onChanged();
        return getLeftChildIdFieldBuilder().getBuilder();
      }
      /**
       * <code>.google.protobuf.Int32Value left_child_id = 1;</code>
       */
      public com.google.protobuf.Int32ValueOrBuilder getLeftChildIdOrBuilder() {
        if (leftChildIdBuilder_ != null) {
          return leftChildIdBuilder_.getMessageOrBuilder();
        } else {
          return leftChildId_ == null ?
              com.google.protobuf.Int32Value.getDefaultInstance() : leftChildId_;
        }
      }
      /**
       * <code>.google.protobuf.Int32Value left_child_id = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Int32Value, com.google.protobuf.Int32Value.Builder, com.google.protobuf.Int32ValueOrBuilder> 
          getLeftChildIdFieldBuilder() {
        if (leftChildIdBuilder_ == null) {
          leftChildIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Int32Value, com.google.protobuf.Int32Value.Builder, com.google.protobuf.Int32ValueOrBuilder>(
                  getLeftChildId(),
                  getParentForChildren(),
                  isClean());
          leftChildId_ = null;
        }
        return leftChildIdBuilder_;
      }

      private com.google.protobuf.Int32Value rightChildId_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Int32Value, com.google.protobuf.Int32Value.Builder, com.google.protobuf.Int32ValueOrBuilder> rightChildIdBuilder_;
      /**
       * <code>.google.protobuf.Int32Value right_child_id = 2;</code>
       */
      public boolean hasRightChildId() {
        return rightChildIdBuilder_ != null || rightChildId_ != null;
      }
      /**
       * <code>.google.protobuf.Int32Value right_child_id = 2;</code>
       */
      public com.google.protobuf.Int32Value getRightChildId() {
        if (rightChildIdBuilder_ == null) {
          return rightChildId_ == null ? com.google.protobuf.Int32Value.getDefaultInstance() : rightChildId_;
        } else {
          return rightChildIdBuilder_.getMessage();
        }
      }
      /**
       * <code>.google.protobuf.Int32Value right_child_id = 2;</code>
       */
      public Builder setRightChildId(com.google.protobuf.Int32Value value) {
        if (rightChildIdBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          rightChildId_ = value;
          onChanged();
        } else {
          rightChildIdBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.google.protobuf.Int32Value right_child_id = 2;</code>
       */
      public Builder setRightChildId(
          com.google.protobuf.Int32Value.Builder builderForValue) {
        if (rightChildIdBuilder_ == null) {
          rightChildId_ = builderForValue.build();
          onChanged();
        } else {
          rightChildIdBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.google.protobuf.Int32Value right_child_id = 2;</code>
       */
      public Builder mergeRightChildId(com.google.protobuf.Int32Value value) {
        if (rightChildIdBuilder_ == null) {
          if (rightChildId_ != null) {
            rightChildId_ =
              com.google.protobuf.Int32Value.newBuilder(rightChildId_).mergeFrom(value).buildPartial();
          } else {
            rightChildId_ = value;
          }
          onChanged();
        } else {
          rightChildIdBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.google.protobuf.Int32Value right_child_id = 2;</code>
       */
      public Builder clearRightChildId() {
        if (rightChildIdBuilder_ == null) {
          rightChildId_ = null;
          onChanged();
        } else {
          rightChildId_ = null;
          rightChildIdBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.google.protobuf.Int32Value right_child_id = 2;</code>
       */
      public com.google.protobuf.Int32Value.Builder getRightChildIdBuilder() {
        
        onChanged();
        return getRightChildIdFieldBuilder().getBuilder();
      }
      /**
       * <code>.google.protobuf.Int32Value right_child_id = 2;</code>
       */
      public com.google.protobuf.Int32ValueOrBuilder getRightChildIdOrBuilder() {
        if (rightChildIdBuilder_ != null) {
          return rightChildIdBuilder_.getMessageOrBuilder();
        } else {
          return rightChildId_ == null ?
              com.google.protobuf.Int32Value.getDefaultInstance() : rightChildId_;
        }
      }
      /**
       * <code>.google.protobuf.Int32Value right_child_id = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Int32Value, com.google.protobuf.Int32Value.Builder, com.google.protobuf.Int32ValueOrBuilder> 
          getRightChildIdFieldBuilder() {
        if (rightChildIdBuilder_ == null) {
          rightChildIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Int32Value, com.google.protobuf.Int32Value.Builder, com.google.protobuf.Int32ValueOrBuilder>(
                  getRightChildId(),
                  getParentForChildren(),
                  isClean());
          rightChildId_ = null;
        }
        return rightChildIdBuilder_;
      }

      private int defaultDirection_ = 0;
      /**
       * <pre>
       * When left_child_test is undefined for a particular datapoint (e.g. because
       * it's not defined when feature value is missing), the datapoint should go
       * in this direction.
       * </pre>
       *
       * <code>.tensorflow.decision_trees.BinaryNode.Direction default_direction = 3;</code>
       */
      public int getDefaultDirectionValue() {
        return defaultDirection_;
      }
      /**
       * <pre>
       * When left_child_test is undefined for a particular datapoint (e.g. because
       * it's not defined when feature value is missing), the datapoint should go
       * in this direction.
       * </pre>
       *
       * <code>.tensorflow.decision_trees.BinaryNode.Direction default_direction = 3;</code>
       */
      public Builder setDefaultDirectionValue(int value) {
        defaultDirection_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * When left_child_test is undefined for a particular datapoint (e.g. because
       * it's not defined when feature value is missing), the datapoint should go
       * in this direction.
       * </pre>
       *
       * <code>.tensorflow.decision_trees.BinaryNode.Direction default_direction = 3;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.BinaryNode.Direction getDefaultDirection() {
        tensorflow.decision_trees.GenericTreeModel.BinaryNode.Direction result = tensorflow.decision_trees.GenericTreeModel.BinaryNode.Direction.valueOf(defaultDirection_);
        return result == null ? tensorflow.decision_trees.GenericTreeModel.BinaryNode.Direction.UNRECOGNIZED : result;
      }
      /**
       * <pre>
       * When left_child_test is undefined for a particular datapoint (e.g. because
       * it's not defined when feature value is missing), the datapoint should go
       * in this direction.
       * </pre>
       *
       * <code>.tensorflow.decision_trees.BinaryNode.Direction default_direction = 3;</code>
       */
      public Builder setDefaultDirection(tensorflow.decision_trees.GenericTreeModel.BinaryNode.Direction value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        defaultDirection_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * When left_child_test is undefined for a particular datapoint (e.g. because
       * it's not defined when feature value is missing), the datapoint should go
       * in this direction.
       * </pre>
       *
       * <code>.tensorflow.decision_trees.BinaryNode.Direction default_direction = 3;</code>
       */
      public Builder clearDefaultDirection() {
        
        defaultDirection_ = 0;
        onChanged();
        return this;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.InequalityTest, tensorflow.decision_trees.GenericTreeModel.InequalityTest.Builder, tensorflow.decision_trees.GenericTreeModel.InequalityTestOrBuilder> inequalityLeftChildTestBuilder_;
      /**
       * <code>.tensorflow.decision_trees.InequalityTest inequality_left_child_test = 4;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.InequalityTest getInequalityLeftChildTest() {
        if (inequalityLeftChildTestBuilder_ == null) {
          if (leftChildTestCase_ == 4) {
            return (tensorflow.decision_trees.GenericTreeModel.InequalityTest) leftChildTest_;
          }
          return tensorflow.decision_trees.GenericTreeModel.InequalityTest.getDefaultInstance();
        } else {
          if (leftChildTestCase_ == 4) {
            return inequalityLeftChildTestBuilder_.getMessage();
          }
          return tensorflow.decision_trees.GenericTreeModel.InequalityTest.getDefaultInstance();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.InequalityTest inequality_left_child_test = 4;</code>
       */
      public Builder setInequalityLeftChildTest(tensorflow.decision_trees.GenericTreeModel.InequalityTest value) {
        if (inequalityLeftChildTestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          leftChildTest_ = value;
          onChanged();
        } else {
          inequalityLeftChildTestBuilder_.setMessage(value);
        }
        leftChildTestCase_ = 4;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.InequalityTest inequality_left_child_test = 4;</code>
       */
      public Builder setInequalityLeftChildTest(
          tensorflow.decision_trees.GenericTreeModel.InequalityTest.Builder builderForValue) {
        if (inequalityLeftChildTestBuilder_ == null) {
          leftChildTest_ = builderForValue.build();
          onChanged();
        } else {
          inequalityLeftChildTestBuilder_.setMessage(builderForValue.build());
        }
        leftChildTestCase_ = 4;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.InequalityTest inequality_left_child_test = 4;</code>
       */
      public Builder mergeInequalityLeftChildTest(tensorflow.decision_trees.GenericTreeModel.InequalityTest value) {
        if (inequalityLeftChildTestBuilder_ == null) {
          if (leftChildTestCase_ == 4 &&
              leftChildTest_ != tensorflow.decision_trees.GenericTreeModel.InequalityTest.getDefaultInstance()) {
            leftChildTest_ = tensorflow.decision_trees.GenericTreeModel.InequalityTest.newBuilder((tensorflow.decision_trees.GenericTreeModel.InequalityTest) leftChildTest_)
                .mergeFrom(value).buildPartial();
          } else {
            leftChildTest_ = value;
          }
          onChanged();
        } else {
          if (leftChildTestCase_ == 4) {
            inequalityLeftChildTestBuilder_.mergeFrom(value);
          }
          inequalityLeftChildTestBuilder_.setMessage(value);
        }
        leftChildTestCase_ = 4;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.InequalityTest inequality_left_child_test = 4;</code>
       */
      public Builder clearInequalityLeftChildTest() {
        if (inequalityLeftChildTestBuilder_ == null) {
          if (leftChildTestCase_ == 4) {
            leftChildTestCase_ = 0;
            leftChildTest_ = null;
            onChanged();
          }
        } else {
          if (leftChildTestCase_ == 4) {
            leftChildTestCase_ = 0;
            leftChildTest_ = null;
          }
          inequalityLeftChildTestBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.InequalityTest inequality_left_child_test = 4;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.InequalityTest.Builder getInequalityLeftChildTestBuilder() {
        return getInequalityLeftChildTestFieldBuilder().getBuilder();
      }
      /**
       * <code>.tensorflow.decision_trees.InequalityTest inequality_left_child_test = 4;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.InequalityTestOrBuilder getInequalityLeftChildTestOrBuilder() {
        if ((leftChildTestCase_ == 4) && (inequalityLeftChildTestBuilder_ != null)) {
          return inequalityLeftChildTestBuilder_.getMessageOrBuilder();
        } else {
          if (leftChildTestCase_ == 4) {
            return (tensorflow.decision_trees.GenericTreeModel.InequalityTest) leftChildTest_;
          }
          return tensorflow.decision_trees.GenericTreeModel.InequalityTest.getDefaultInstance();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.InequalityTest inequality_left_child_test = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.InequalityTest, tensorflow.decision_trees.GenericTreeModel.InequalityTest.Builder, tensorflow.decision_trees.GenericTreeModel.InequalityTestOrBuilder> 
          getInequalityLeftChildTestFieldBuilder() {
        if (inequalityLeftChildTestBuilder_ == null) {
          if (!(leftChildTestCase_ == 4)) {
            leftChildTest_ = tensorflow.decision_trees.GenericTreeModel.InequalityTest.getDefaultInstance();
          }
          inequalityLeftChildTestBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              tensorflow.decision_trees.GenericTreeModel.InequalityTest, tensorflow.decision_trees.GenericTreeModel.InequalityTest.Builder, tensorflow.decision_trees.GenericTreeModel.InequalityTestOrBuilder>(
                  (tensorflow.decision_trees.GenericTreeModel.InequalityTest) leftChildTest_,
                  getParentForChildren(),
                  isClean());
          leftChildTest_ = null;
        }
        leftChildTestCase_ = 4;
        onChanged();;
        return inequalityLeftChildTestBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> customLeftChildTestBuilder_;
      /**
       * <code>.google.protobuf.Any custom_left_child_test = 5;</code>
       */
      public com.google.protobuf.Any getCustomLeftChildTest() {
        if (customLeftChildTestBuilder_ == null) {
          if (leftChildTestCase_ == 5) {
            return (com.google.protobuf.Any) leftChildTest_;
          }
          return com.google.protobuf.Any.getDefaultInstance();
        } else {
          if (leftChildTestCase_ == 5) {
            return customLeftChildTestBuilder_.getMessage();
          }
          return com.google.protobuf.Any.getDefaultInstance();
        }
      }
      /**
       * <code>.google.protobuf.Any custom_left_child_test = 5;</code>
       */
      public Builder setCustomLeftChildTest(com.google.protobuf.Any value) {
        if (customLeftChildTestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          leftChildTest_ = value;
          onChanged();
        } else {
          customLeftChildTestBuilder_.setMessage(value);
        }
        leftChildTestCase_ = 5;
        return this;
      }
      /**
       * <code>.google.protobuf.Any custom_left_child_test = 5;</code>
       */
      public Builder setCustomLeftChildTest(
          com.google.protobuf.Any.Builder builderForValue) {
        if (customLeftChildTestBuilder_ == null) {
          leftChildTest_ = builderForValue.build();
          onChanged();
        } else {
          customLeftChildTestBuilder_.setMessage(builderForValue.build());
        }
        leftChildTestCase_ = 5;
        return this;
      }
      /**
       * <code>.google.protobuf.Any custom_left_child_test = 5;</code>
       */
      public Builder mergeCustomLeftChildTest(com.google.protobuf.Any value) {
        if (customLeftChildTestBuilder_ == null) {
          if (leftChildTestCase_ == 5 &&
              leftChildTest_ != com.google.protobuf.Any.getDefaultInstance()) {
            leftChildTest_ = com.google.protobuf.Any.newBuilder((com.google.protobuf.Any) leftChildTest_)
                .mergeFrom(value).buildPartial();
          } else {
            leftChildTest_ = value;
          }
          onChanged();
        } else {
          if (leftChildTestCase_ == 5) {
            customLeftChildTestBuilder_.mergeFrom(value);
          }
          customLeftChildTestBuilder_.setMessage(value);
        }
        leftChildTestCase_ = 5;
        return this;
      }
      /**
       * <code>.google.protobuf.Any custom_left_child_test = 5;</code>
       */
      public Builder clearCustomLeftChildTest() {
        if (customLeftChildTestBuilder_ == null) {
          if (leftChildTestCase_ == 5) {
            leftChildTestCase_ = 0;
            leftChildTest_ = null;
            onChanged();
          }
        } else {
          if (leftChildTestCase_ == 5) {
            leftChildTestCase_ = 0;
            leftChildTest_ = null;
          }
          customLeftChildTestBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>.google.protobuf.Any custom_left_child_test = 5;</code>
       */
      public com.google.protobuf.Any.Builder getCustomLeftChildTestBuilder() {
        return getCustomLeftChildTestFieldBuilder().getBuilder();
      }
      /**
       * <code>.google.protobuf.Any custom_left_child_test = 5;</code>
       */
      public com.google.protobuf.AnyOrBuilder getCustomLeftChildTestOrBuilder() {
        if ((leftChildTestCase_ == 5) && (customLeftChildTestBuilder_ != null)) {
          return customLeftChildTestBuilder_.getMessageOrBuilder();
        } else {
          if (leftChildTestCase_ == 5) {
            return (com.google.protobuf.Any) leftChildTest_;
          }
          return com.google.protobuf.Any.getDefaultInstance();
        }
      }
      /**
       * <code>.google.protobuf.Any custom_left_child_test = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> 
          getCustomLeftChildTestFieldBuilder() {
        if (customLeftChildTestBuilder_ == null) {
          if (!(leftChildTestCase_ == 5)) {
            leftChildTest_ = com.google.protobuf.Any.getDefaultInstance();
          }
          customLeftChildTestBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder>(
                  (com.google.protobuf.Any) leftChildTest_,
                  getParentForChildren(),
                  isClean());
          leftChildTest_ = null;
        }
        leftChildTestCase_ = 5;
        onChanged();;
        return customLeftChildTestBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.decision_trees.BinaryNode)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.decision_trees.BinaryNode)
    private static final tensorflow.decision_trees.GenericTreeModel.BinaryNode DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.decision_trees.GenericTreeModel.BinaryNode();
    }

    public static tensorflow.decision_trees.GenericTreeModel.BinaryNode getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public tensorflow.decision_trees.GenericTreeModel.BinaryNode getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SparseVectorOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.decision_trees.SparseVector)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>map&lt;int64, .tensorflow.decision_trees.Value&gt; sparse_value = 1;</code>
     */
    int getSparseValueCount();
    /**
     * <code>map&lt;int64, .tensorflow.decision_trees.Value&gt; sparse_value = 1;</code>
     */
    boolean containsSparseValue(
        long key);
    /**
     * Use {@link #getSparseValueMap()} instead.
     */
    @java.lang.Deprecated
    java.util.Map<java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value>
    getSparseValue();
    /**
     * <code>map&lt;int64, .tensorflow.decision_trees.Value&gt; sparse_value = 1;</code>
     */
    java.util.Map<java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value>
    getSparseValueMap();
    /**
     * <code>map&lt;int64, .tensorflow.decision_trees.Value&gt; sparse_value = 1;</code>
     */

    tensorflow.decision_trees.GenericTreeModel.Value getSparseValueOrDefault(
        long key,
        tensorflow.decision_trees.GenericTreeModel.Value defaultValue);
    /**
     * <code>map&lt;int64, .tensorflow.decision_trees.Value&gt; sparse_value = 1;</code>
     */

    tensorflow.decision_trees.GenericTreeModel.Value getSparseValueOrThrow(
        long key);
  }
  /**
   * <pre>
   * A SparseVector represents a vector in which only certain select elements
   * are non-zero.  Maps labels to values (e.g. class id to probability or count).
   * </pre>
   *
   * Protobuf type {@code tensorflow.decision_trees.SparseVector}
   */
  public  static final class SparseVector extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.decision_trees.SparseVector)
      SparseVectorOrBuilder {
    // Use SparseVector.newBuilder() to construct.
    private SparseVector(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SparseVector() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private SparseVector(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                sparseValue_ = com.google.protobuf.MapField.newMapField(
                    SparseValueDefaultEntryHolder.defaultEntry);
                mutable_bitField0_ |= 0x00000001;
              }
              com.google.protobuf.MapEntry<java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value>
              sparseValue__ = input.readMessage(
                  SparseValueDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
              sparseValue_.getMutableMap().put(
                  sparseValue__.getKey(), sparseValue__.getValue());
              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_SparseVector_descriptor;
    }

    @SuppressWarnings({"rawtypes"})
    protected com.google.protobuf.MapField internalGetMapField(
        int number) {
      switch (number) {
        case 1:
          return internalGetSparseValue();
        default:
          throw new RuntimeException(
              "Invalid map field number: " + number);
      }
    }
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_SparseVector_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.decision_trees.GenericTreeModel.SparseVector.class, tensorflow.decision_trees.GenericTreeModel.SparseVector.Builder.class);
    }

    public static final int SPARSE_VALUE_FIELD_NUMBER = 1;
    private static final class SparseValueDefaultEntryHolder {
      static final com.google.protobuf.MapEntry<
          java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value> defaultEntry =
              com.google.protobuf.MapEntry
              .<java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value>newDefaultInstance(
                  tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_SparseVector_SparseValueEntry_descriptor, 
                  com.google.protobuf.WireFormat.FieldType.INT64,
                  0L,
                  com.google.protobuf.WireFormat.FieldType.MESSAGE,
                  tensorflow.decision_trees.GenericTreeModel.Value.getDefaultInstance());
    }
    private com.google.protobuf.MapField<
        java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value> sparseValue_;
    private com.google.protobuf.MapField<java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value>
    internalGetSparseValue() {
      if (sparseValue_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            SparseValueDefaultEntryHolder.defaultEntry);
      }
      return sparseValue_;
    }

    public int getSparseValueCount() {
      return internalGetSparseValue().getMap().size();
    }
    /**
     * <code>map&lt;int64, .tensorflow.decision_trees.Value&gt; sparse_value = 1;</code>
     */

    public boolean containsSparseValue(
        long key) {
      
      return internalGetSparseValue().getMap().containsKey(key);
    }
    /**
     * Use {@link #getSparseValueMap()} instead.
     */
    @java.lang.Deprecated
    public java.util.Map<java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value> getSparseValue() {
      return getSparseValueMap();
    }
    /**
     * <code>map&lt;int64, .tensorflow.decision_trees.Value&gt; sparse_value = 1;</code>
     */

    public java.util.Map<java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value> getSparseValueMap() {
      return internalGetSparseValue().getMap();
    }
    /**
     * <code>map&lt;int64, .tensorflow.decision_trees.Value&gt; sparse_value = 1;</code>
     */

    public tensorflow.decision_trees.GenericTreeModel.Value getSparseValueOrDefault(
        long key,
        tensorflow.decision_trees.GenericTreeModel.Value defaultValue) {
      
      java.util.Map<java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value> map =
          internalGetSparseValue().getMap();
      return map.containsKey(key) ? map.get(key) : defaultValue;
    }
    /**
     * <code>map&lt;int64, .tensorflow.decision_trees.Value&gt; sparse_value = 1;</code>
     */

    public tensorflow.decision_trees.GenericTreeModel.Value getSparseValueOrThrow(
        long key) {
      
      java.util.Map<java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value> map =
          internalGetSparseValue().getMap();
      if (!map.containsKey(key)) {
        throw new java.lang.IllegalArgumentException();
      }
      return map.get(key);
    }

    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 {
      com.google.protobuf.GeneratedMessageV3
        .serializeLongMapTo(
          output,
          internalGetSparseValue(),
          SparseValueDefaultEntryHolder.defaultEntry,
          1);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (java.util.Map.Entry<java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value> entry
           : internalGetSparseValue().getMap().entrySet()) {
        com.google.protobuf.MapEntry<java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value>
        sparseValue__ = SparseValueDefaultEntryHolder.defaultEntry.newBuilderForType()
            .setKey(entry.getKey())
            .setValue(entry.getValue())
            .build();
        size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, sparseValue__);
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.decision_trees.GenericTreeModel.SparseVector)) {
        return super.equals(obj);
      }
      tensorflow.decision_trees.GenericTreeModel.SparseVector other = (tensorflow.decision_trees.GenericTreeModel.SparseVector) obj;

      boolean result = true;
      result = result && internalGetSparseValue().equals(
          other.internalGetSparseValue());
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (!internalGetSparseValue().getMap().isEmpty()) {
        hash = (37 * hash) + SPARSE_VALUE_FIELD_NUMBER;
        hash = (53 * hash) + internalGetSparseValue().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.decision_trees.GenericTreeModel.SparseVector parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.SparseVector parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.SparseVector parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.SparseVector parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.SparseVector parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.SparseVector 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 tensorflow.decision_trees.GenericTreeModel.SparseVector parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.SparseVector 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 tensorflow.decision_trees.GenericTreeModel.SparseVector parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.SparseVector 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(tensorflow.decision_trees.GenericTreeModel.SparseVector 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 SparseVector represents a vector in which only certain select elements
     * are non-zero.  Maps labels to values (e.g. class id to probability or count).
     * </pre>
     *
     * Protobuf type {@code tensorflow.decision_trees.SparseVector}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.decision_trees.SparseVector)
        tensorflow.decision_trees.GenericTreeModel.SparseVectorOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_SparseVector_descriptor;
      }

      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMapField(
          int number) {
        switch (number) {
          case 1:
            return internalGetSparseValue();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMutableMapField(
          int number) {
        switch (number) {
          case 1:
            return internalGetMutableSparseValue();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_SparseVector_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.decision_trees.GenericTreeModel.SparseVector.class, tensorflow.decision_trees.GenericTreeModel.SparseVector.Builder.class);
      }

      // Construct using tensorflow.decision_trees.GenericTreeModel.SparseVector.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();
        internalGetMutableSparseValue().clear();
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_SparseVector_descriptor;
      }

      public tensorflow.decision_trees.GenericTreeModel.SparseVector getDefaultInstanceForType() {
        return tensorflow.decision_trees.GenericTreeModel.SparseVector.getDefaultInstance();
      }

      public tensorflow.decision_trees.GenericTreeModel.SparseVector build() {
        tensorflow.decision_trees.GenericTreeModel.SparseVector result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.decision_trees.GenericTreeModel.SparseVector buildPartial() {
        tensorflow.decision_trees.GenericTreeModel.SparseVector result = new tensorflow.decision_trees.GenericTreeModel.SparseVector(this);
        int from_bitField0_ = bitField0_;
        result.sparseValue_ = internalGetSparseValue();
        result.sparseValue_.makeImmutable();
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          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, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.decision_trees.GenericTreeModel.SparseVector) {
          return mergeFrom((tensorflow.decision_trees.GenericTreeModel.SparseVector)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.decision_trees.GenericTreeModel.SparseVector other) {
        if (other == tensorflow.decision_trees.GenericTreeModel.SparseVector.getDefaultInstance()) return this;
        internalGetMutableSparseValue().mergeFrom(
            other.internalGetSparseValue());
        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 {
        tensorflow.decision_trees.GenericTreeModel.SparseVector parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.decision_trees.GenericTreeModel.SparseVector) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.protobuf.MapField<
          java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value> sparseValue_;
      private com.google.protobuf.MapField<java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value>
      internalGetSparseValue() {
        if (sparseValue_ == null) {
          return com.google.protobuf.MapField.emptyMapField(
              SparseValueDefaultEntryHolder.defaultEntry);
        }
        return sparseValue_;
      }
      private com.google.protobuf.MapField<java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value>
      internalGetMutableSparseValue() {
        onChanged();;
        if (sparseValue_ == null) {
          sparseValue_ = com.google.protobuf.MapField.newMapField(
              SparseValueDefaultEntryHolder.defaultEntry);
        }
        if (!sparseValue_.isMutable()) {
          sparseValue_ = sparseValue_.copy();
        }
        return sparseValue_;
      }

      public int getSparseValueCount() {
        return internalGetSparseValue().getMap().size();
      }
      /**
       * <code>map&lt;int64, .tensorflow.decision_trees.Value&gt; sparse_value = 1;</code>
       */

      public boolean containsSparseValue(
          long key) {
        
        return internalGetSparseValue().getMap().containsKey(key);
      }
      /**
       * Use {@link #getSparseValueMap()} instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value> getSparseValue() {
        return getSparseValueMap();
      }
      /**
       * <code>map&lt;int64, .tensorflow.decision_trees.Value&gt; sparse_value = 1;</code>
       */

      public java.util.Map<java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value> getSparseValueMap() {
        return internalGetSparseValue().getMap();
      }
      /**
       * <code>map&lt;int64, .tensorflow.decision_trees.Value&gt; sparse_value = 1;</code>
       */

      public tensorflow.decision_trees.GenericTreeModel.Value getSparseValueOrDefault(
          long key,
          tensorflow.decision_trees.GenericTreeModel.Value defaultValue) {
        
        java.util.Map<java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value> map =
            internalGetSparseValue().getMap();
        return map.containsKey(key) ? map.get(key) : defaultValue;
      }
      /**
       * <code>map&lt;int64, .tensorflow.decision_trees.Value&gt; sparse_value = 1;</code>
       */

      public tensorflow.decision_trees.GenericTreeModel.Value getSparseValueOrThrow(
          long key) {
        
        java.util.Map<java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value> map =
            internalGetSparseValue().getMap();
        if (!map.containsKey(key)) {
          throw new java.lang.IllegalArgumentException();
        }
        return map.get(key);
      }

      public Builder clearSparseValue() {
        internalGetMutableSparseValue().getMutableMap()
            .clear();
        return this;
      }
      /**
       * <code>map&lt;int64, .tensorflow.decision_trees.Value&gt; sparse_value = 1;</code>
       */

      public Builder removeSparseValue(
          long key) {
        
        internalGetMutableSparseValue().getMutableMap()
            .remove(key);
        return this;
      }
      /**
       * Use alternate mutation accessors instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value>
      getMutableSparseValue() {
        return internalGetMutableSparseValue().getMutableMap();
      }
      /**
       * <code>map&lt;int64, .tensorflow.decision_trees.Value&gt; sparse_value = 1;</code>
       */
      public Builder putSparseValue(
          long key,
          tensorflow.decision_trees.GenericTreeModel.Value value) {
        
        if (value == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableSparseValue().getMutableMap()
            .put(key, value);
        return this;
      }
      /**
       * <code>map&lt;int64, .tensorflow.decision_trees.Value&gt; sparse_value = 1;</code>
       */

      public Builder putAllSparseValue(
          java.util.Map<java.lang.Long, tensorflow.decision_trees.GenericTreeModel.Value> values) {
        internalGetMutableSparseValue().getMutableMap()
            .putAll(values);
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.decision_trees.SparseVector)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.decision_trees.SparseVector)
    private static final tensorflow.decision_trees.GenericTreeModel.SparseVector DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.decision_trees.GenericTreeModel.SparseVector();
    }

    public static tensorflow.decision_trees.GenericTreeModel.SparseVector getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public tensorflow.decision_trees.GenericTreeModel.SparseVector getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface VectorOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.decision_trees.Vector)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
     */
    java.util.List<tensorflow.decision_trees.GenericTreeModel.Value> 
        getValueList();
    /**
     * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.Value getValue(int index);
    /**
     * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
     */
    int getValueCount();
    /**
     * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
     */
    java.util.List<? extends tensorflow.decision_trees.GenericTreeModel.ValueOrBuilder> 
        getValueOrBuilderList();
    /**
     * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.ValueOrBuilder getValueOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code tensorflow.decision_trees.Vector}
   */
  public  static final class Vector extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.decision_trees.Vector)
      VectorOrBuilder {
    // Use Vector.newBuilder() to construct.
    private Vector(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Vector() {
      value_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private Vector(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                value_ = new java.util.ArrayList<tensorflow.decision_trees.GenericTreeModel.Value>();
                mutable_bitField0_ |= 0x00000001;
              }
              value_.add(
                  input.readMessage(tensorflow.decision_trees.GenericTreeModel.Value.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)) {
          value_ = java.util.Collections.unmodifiableList(value_);
        }
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Vector_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Vector_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.decision_trees.GenericTreeModel.Vector.class, tensorflow.decision_trees.GenericTreeModel.Vector.Builder.class);
    }

    public static final int VALUE_FIELD_NUMBER = 1;
    private java.util.List<tensorflow.decision_trees.GenericTreeModel.Value> value_;
    /**
     * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
     */
    public java.util.List<tensorflow.decision_trees.GenericTreeModel.Value> getValueList() {
      return value_;
    }
    /**
     * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
     */
    public java.util.List<? extends tensorflow.decision_trees.GenericTreeModel.ValueOrBuilder> 
        getValueOrBuilderList() {
      return value_;
    }
    /**
     * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
     */
    public int getValueCount() {
      return value_.size();
    }
    /**
     * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.Value getValue(int index) {
      return value_.get(index);
    }
    /**
     * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.ValueOrBuilder getValueOrBuilder(
        int index) {
      return value_.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 < value_.size(); i++) {
        output.writeMessage(1, value_.get(i));
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < value_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, value_.get(i));
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.decision_trees.GenericTreeModel.Vector)) {
        return super.equals(obj);
      }
      tensorflow.decision_trees.GenericTreeModel.Vector other = (tensorflow.decision_trees.GenericTreeModel.Vector) obj;

      boolean result = true;
      result = result && getValueList()
          .equals(other.getValueList());
      return result;
    }

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

    public static tensorflow.decision_trees.GenericTreeModel.Vector parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Vector parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Vector parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Vector parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Vector parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Vector 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 tensorflow.decision_trees.GenericTreeModel.Vector parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Vector 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 tensorflow.decision_trees.GenericTreeModel.Vector parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Vector 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(tensorflow.decision_trees.GenericTreeModel.Vector 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;
    }
    /**
     * Protobuf type {@code tensorflow.decision_trees.Vector}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.decision_trees.Vector)
        tensorflow.decision_trees.GenericTreeModel.VectorOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Vector_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Vector_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.decision_trees.GenericTreeModel.Vector.class, tensorflow.decision_trees.GenericTreeModel.Vector.Builder.class);
      }

      // Construct using tensorflow.decision_trees.GenericTreeModel.Vector.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getValueFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (valueBuilder_ == null) {
          value_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          valueBuilder_.clear();
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Vector_descriptor;
      }

      public tensorflow.decision_trees.GenericTreeModel.Vector getDefaultInstanceForType() {
        return tensorflow.decision_trees.GenericTreeModel.Vector.getDefaultInstance();
      }

      public tensorflow.decision_trees.GenericTreeModel.Vector build() {
        tensorflow.decision_trees.GenericTreeModel.Vector result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.decision_trees.GenericTreeModel.Vector buildPartial() {
        tensorflow.decision_trees.GenericTreeModel.Vector result = new tensorflow.decision_trees.GenericTreeModel.Vector(this);
        int from_bitField0_ = bitField0_;
        if (valueBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            value_ = java.util.Collections.unmodifiableList(value_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.value_ = value_;
        } else {
          result.value_ = valueBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          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, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.decision_trees.GenericTreeModel.Vector) {
          return mergeFrom((tensorflow.decision_trees.GenericTreeModel.Vector)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.decision_trees.GenericTreeModel.Vector other) {
        if (other == tensorflow.decision_trees.GenericTreeModel.Vector.getDefaultInstance()) return this;
        if (valueBuilder_ == null) {
          if (!other.value_.isEmpty()) {
            if (value_.isEmpty()) {
              value_ = other.value_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureValueIsMutable();
              value_.addAll(other.value_);
            }
            onChanged();
          }
        } else {
          if (!other.value_.isEmpty()) {
            if (valueBuilder_.isEmpty()) {
              valueBuilder_.dispose();
              valueBuilder_ = null;
              value_ = other.value_;
              bitField0_ = (bitField0_ & ~0x00000001);
              valueBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getValueFieldBuilder() : null;
            } else {
              valueBuilder_.addAllMessages(other.value_);
            }
          }
        }
        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 {
        tensorflow.decision_trees.GenericTreeModel.Vector parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.decision_trees.GenericTreeModel.Vector) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<tensorflow.decision_trees.GenericTreeModel.Value> value_ =
        java.util.Collections.emptyList();
      private void ensureValueIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          value_ = new java.util.ArrayList<tensorflow.decision_trees.GenericTreeModel.Value>(value_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.Value, tensorflow.decision_trees.GenericTreeModel.Value.Builder, tensorflow.decision_trees.GenericTreeModel.ValueOrBuilder> valueBuilder_;

      /**
       * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
       */
      public java.util.List<tensorflow.decision_trees.GenericTreeModel.Value> getValueList() {
        if (valueBuilder_ == null) {
          return java.util.Collections.unmodifiableList(value_);
        } else {
          return valueBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
       */
      public int getValueCount() {
        if (valueBuilder_ == null) {
          return value_.size();
        } else {
          return valueBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Value getValue(int index) {
        if (valueBuilder_ == null) {
          return value_.get(index);
        } else {
          return valueBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
       */
      public Builder setValue(
          int index, tensorflow.decision_trees.GenericTreeModel.Value value) {
        if (valueBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureValueIsMutable();
          value_.set(index, value);
          onChanged();
        } else {
          valueBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
       */
      public Builder setValue(
          int index, tensorflow.decision_trees.GenericTreeModel.Value.Builder builderForValue) {
        if (valueBuilder_ == null) {
          ensureValueIsMutable();
          value_.set(index, builderForValue.build());
          onChanged();
        } else {
          valueBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
       */
      public Builder addValue(tensorflow.decision_trees.GenericTreeModel.Value value) {
        if (valueBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureValueIsMutable();
          value_.add(value);
          onChanged();
        } else {
          valueBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
       */
      public Builder addValue(
          int index, tensorflow.decision_trees.GenericTreeModel.Value value) {
        if (valueBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureValueIsMutable();
          value_.add(index, value);
          onChanged();
        } else {
          valueBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
       */
      public Builder addValue(
          tensorflow.decision_trees.GenericTreeModel.Value.Builder builderForValue) {
        if (valueBuilder_ == null) {
          ensureValueIsMutable();
          value_.add(builderForValue.build());
          onChanged();
        } else {
          valueBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
       */
      public Builder addValue(
          int index, tensorflow.decision_trees.GenericTreeModel.Value.Builder builderForValue) {
        if (valueBuilder_ == null) {
          ensureValueIsMutable();
          value_.add(index, builderForValue.build());
          onChanged();
        } else {
          valueBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
       */
      public Builder addAllValue(
          java.lang.Iterable<? extends tensorflow.decision_trees.GenericTreeModel.Value> values) {
        if (valueBuilder_ == null) {
          ensureValueIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, value_);
          onChanged();
        } else {
          valueBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
       */
      public Builder clearValue() {
        if (valueBuilder_ == null) {
          value_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          valueBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
       */
      public Builder removeValue(int index) {
        if (valueBuilder_ == null) {
          ensureValueIsMutable();
          value_.remove(index);
          onChanged();
        } else {
          valueBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Value.Builder getValueBuilder(
          int index) {
        return getValueFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.ValueOrBuilder getValueOrBuilder(
          int index) {
        if (valueBuilder_ == null) {
          return value_.get(index);  } else {
          return valueBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
       */
      public java.util.List<? extends tensorflow.decision_trees.GenericTreeModel.ValueOrBuilder> 
           getValueOrBuilderList() {
        if (valueBuilder_ != null) {
          return valueBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(value_);
        }
      }
      /**
       * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Value.Builder addValueBuilder() {
        return getValueFieldBuilder().addBuilder(
            tensorflow.decision_trees.GenericTreeModel.Value.getDefaultInstance());
      }
      /**
       * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Value.Builder addValueBuilder(
          int index) {
        return getValueFieldBuilder().addBuilder(
            index, tensorflow.decision_trees.GenericTreeModel.Value.getDefaultInstance());
      }
      /**
       * <code>repeated .tensorflow.decision_trees.Value value = 1;</code>
       */
      public java.util.List<tensorflow.decision_trees.GenericTreeModel.Value.Builder> 
           getValueBuilderList() {
        return getValueFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.Value, tensorflow.decision_trees.GenericTreeModel.Value.Builder, tensorflow.decision_trees.GenericTreeModel.ValueOrBuilder> 
          getValueFieldBuilder() {
        if (valueBuilder_ == null) {
          valueBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              tensorflow.decision_trees.GenericTreeModel.Value, tensorflow.decision_trees.GenericTreeModel.Value.Builder, tensorflow.decision_trees.GenericTreeModel.ValueOrBuilder>(
                  value_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          value_ = null;
        }
        return valueBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.decision_trees.Vector)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.decision_trees.Vector)
    private static final tensorflow.decision_trees.GenericTreeModel.Vector DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.decision_trees.GenericTreeModel.Vector();
    }

    public static tensorflow.decision_trees.GenericTreeModel.Vector getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public tensorflow.decision_trees.GenericTreeModel.Vector getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface LeafOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.decision_trees.Leaf)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * The interpretation of the values held in the leaves of a decision tree
     * is application specific, but some common cases are:
     * 1) len(vector) = 1, and the floating point value[0] holds the class 0
     *    probability in a two class classification problem.
     * 2) len(vector) = 1, and the integer value[0] holds the class prediction.
     * 3) The floating point value[i] holds the class i probability prediction.
     * 4) The floating point value[i] holds the i-th component of the
     *    vector prediction in a regression problem.
     * 5) sparse_vector holds the sparse class predictions for a classification
     *    problem with a large number of classes.
     * </pre>
     *
     * <code>.tensorflow.decision_trees.Vector vector = 1;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.Vector getVector();
    /**
     * <pre>
     * The interpretation of the values held in the leaves of a decision tree
     * is application specific, but some common cases are:
     * 1) len(vector) = 1, and the floating point value[0] holds the class 0
     *    probability in a two class classification problem.
     * 2) len(vector) = 1, and the integer value[0] holds the class prediction.
     * 3) The floating point value[i] holds the class i probability prediction.
     * 4) The floating point value[i] holds the i-th component of the
     *    vector prediction in a regression problem.
     * 5) sparse_vector holds the sparse class predictions for a classification
     *    problem with a large number of classes.
     * </pre>
     *
     * <code>.tensorflow.decision_trees.Vector vector = 1;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.VectorOrBuilder getVectorOrBuilder();

    /**
     * <code>.tensorflow.decision_trees.SparseVector sparse_vector = 2;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.SparseVector getSparseVector();
    /**
     * <code>.tensorflow.decision_trees.SparseVector sparse_vector = 2;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.SparseVectorOrBuilder getSparseVectorOrBuilder();

    /**
     * <pre>
     * For non-standard handling of leaves.
     * </pre>
     *
     * <code>repeated .google.protobuf.Any additional_data = 3;</code>
     */
    java.util.List<com.google.protobuf.Any> 
        getAdditionalDataList();
    /**
     * <pre>
     * For non-standard handling of leaves.
     * </pre>
     *
     * <code>repeated .google.protobuf.Any additional_data = 3;</code>
     */
    com.google.protobuf.Any getAdditionalData(int index);
    /**
     * <pre>
     * For non-standard handling of leaves.
     * </pre>
     *
     * <code>repeated .google.protobuf.Any additional_data = 3;</code>
     */
    int getAdditionalDataCount();
    /**
     * <pre>
     * For non-standard handling of leaves.
     * </pre>
     *
     * <code>repeated .google.protobuf.Any additional_data = 3;</code>
     */
    java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
        getAdditionalDataOrBuilderList();
    /**
     * <pre>
     * For non-standard handling of leaves.
     * </pre>
     *
     * <code>repeated .google.protobuf.Any additional_data = 3;</code>
     */
    com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
        int index);

    public tensorflow.decision_trees.GenericTreeModel.Leaf.LeafCase getLeafCase();
  }
  /**
   * Protobuf type {@code tensorflow.decision_trees.Leaf}
   */
  public  static final class Leaf extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.decision_trees.Leaf)
      LeafOrBuilder {
    // Use Leaf.newBuilder() to construct.
    private Leaf(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Leaf() {
      additionalData_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private Leaf(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              tensorflow.decision_trees.GenericTreeModel.Vector.Builder subBuilder = null;
              if (leafCase_ == 1) {
                subBuilder = ((tensorflow.decision_trees.GenericTreeModel.Vector) leaf_).toBuilder();
              }
              leaf_ =
                  input.readMessage(tensorflow.decision_trees.GenericTreeModel.Vector.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((tensorflow.decision_trees.GenericTreeModel.Vector) leaf_);
                leaf_ = subBuilder.buildPartial();
              }
              leafCase_ = 1;
              break;
            }
            case 18: {
              tensorflow.decision_trees.GenericTreeModel.SparseVector.Builder subBuilder = null;
              if (leafCase_ == 2) {
                subBuilder = ((tensorflow.decision_trees.GenericTreeModel.SparseVector) leaf_).toBuilder();
              }
              leaf_ =
                  input.readMessage(tensorflow.decision_trees.GenericTreeModel.SparseVector.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((tensorflow.decision_trees.GenericTreeModel.SparseVector) leaf_);
                leaf_ = subBuilder.buildPartial();
              }
              leafCase_ = 2;
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>();
                mutable_bitField0_ |= 0x00000004;
              }
              additionalData_.add(
                  input.readMessage(com.google.protobuf.Any.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_ & 0x00000004) == 0x00000004)) {
          additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
        }
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Leaf_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Leaf_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.decision_trees.GenericTreeModel.Leaf.class, tensorflow.decision_trees.GenericTreeModel.Leaf.Builder.class);
    }

    private int bitField0_;
    private int leafCase_ = 0;
    private java.lang.Object leaf_;
    public enum LeafCase
        implements com.google.protobuf.Internal.EnumLite {
      VECTOR(1),
      SPARSE_VECTOR(2),
      LEAF_NOT_SET(0);
      private final int value;
      private LeafCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static LeafCase valueOf(int value) {
        return forNumber(value);
      }

      public static LeafCase forNumber(int value) {
        switch (value) {
          case 1: return VECTOR;
          case 2: return SPARSE_VECTOR;
          case 0: return LEAF_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public LeafCase
    getLeafCase() {
      return LeafCase.forNumber(
          leafCase_);
    }

    public static final int VECTOR_FIELD_NUMBER = 1;
    /**
     * <pre>
     * The interpretation of the values held in the leaves of a decision tree
     * is application specific, but some common cases are:
     * 1) len(vector) = 1, and the floating point value[0] holds the class 0
     *    probability in a two class classification problem.
     * 2) len(vector) = 1, and the integer value[0] holds the class prediction.
     * 3) The floating point value[i] holds the class i probability prediction.
     * 4) The floating point value[i] holds the i-th component of the
     *    vector prediction in a regression problem.
     * 5) sparse_vector holds the sparse class predictions for a classification
     *    problem with a large number of classes.
     * </pre>
     *
     * <code>.tensorflow.decision_trees.Vector vector = 1;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.Vector getVector() {
      if (leafCase_ == 1) {
         return (tensorflow.decision_trees.GenericTreeModel.Vector) leaf_;
      }
      return tensorflow.decision_trees.GenericTreeModel.Vector.getDefaultInstance();
    }
    /**
     * <pre>
     * The interpretation of the values held in the leaves of a decision tree
     * is application specific, but some common cases are:
     * 1) len(vector) = 1, and the floating point value[0] holds the class 0
     *    probability in a two class classification problem.
     * 2) len(vector) = 1, and the integer value[0] holds the class prediction.
     * 3) The floating point value[i] holds the class i probability prediction.
     * 4) The floating point value[i] holds the i-th component of the
     *    vector prediction in a regression problem.
     * 5) sparse_vector holds the sparse class predictions for a classification
     *    problem with a large number of classes.
     * </pre>
     *
     * <code>.tensorflow.decision_trees.Vector vector = 1;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.VectorOrBuilder getVectorOrBuilder() {
      if (leafCase_ == 1) {
         return (tensorflow.decision_trees.GenericTreeModel.Vector) leaf_;
      }
      return tensorflow.decision_trees.GenericTreeModel.Vector.getDefaultInstance();
    }

    public static final int SPARSE_VECTOR_FIELD_NUMBER = 2;
    /**
     * <code>.tensorflow.decision_trees.SparseVector sparse_vector = 2;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.SparseVector getSparseVector() {
      if (leafCase_ == 2) {
         return (tensorflow.decision_trees.GenericTreeModel.SparseVector) leaf_;
      }
      return tensorflow.decision_trees.GenericTreeModel.SparseVector.getDefaultInstance();
    }
    /**
     * <code>.tensorflow.decision_trees.SparseVector sparse_vector = 2;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.SparseVectorOrBuilder getSparseVectorOrBuilder() {
      if (leafCase_ == 2) {
         return (tensorflow.decision_trees.GenericTreeModel.SparseVector) leaf_;
      }
      return tensorflow.decision_trees.GenericTreeModel.SparseVector.getDefaultInstance();
    }

    public static final int ADDITIONAL_DATA_FIELD_NUMBER = 3;
    private java.util.List<com.google.protobuf.Any> additionalData_;
    /**
     * <pre>
     * For non-standard handling of leaves.
     * </pre>
     *
     * <code>repeated .google.protobuf.Any additional_data = 3;</code>
     */
    public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
      return additionalData_;
    }
    /**
     * <pre>
     * For non-standard handling of leaves.
     * </pre>
     *
     * <code>repeated .google.protobuf.Any additional_data = 3;</code>
     */
    public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
        getAdditionalDataOrBuilderList() {
      return additionalData_;
    }
    /**
     * <pre>
     * For non-standard handling of leaves.
     * </pre>
     *
     * <code>repeated .google.protobuf.Any additional_data = 3;</code>
     */
    public int getAdditionalDataCount() {
      return additionalData_.size();
    }
    /**
     * <pre>
     * For non-standard handling of leaves.
     * </pre>
     *
     * <code>repeated .google.protobuf.Any additional_data = 3;</code>
     */
    public com.google.protobuf.Any getAdditionalData(int index) {
      return additionalData_.get(index);
    }
    /**
     * <pre>
     * For non-standard handling of leaves.
     * </pre>
     *
     * <code>repeated .google.protobuf.Any additional_data = 3;</code>
     */
    public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
        int index) {
      return additionalData_.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 {
      if (leafCase_ == 1) {
        output.writeMessage(1, (tensorflow.decision_trees.GenericTreeModel.Vector) leaf_);
      }
      if (leafCase_ == 2) {
        output.writeMessage(2, (tensorflow.decision_trees.GenericTreeModel.SparseVector) leaf_);
      }
      for (int i = 0; i < additionalData_.size(); i++) {
        output.writeMessage(3, additionalData_.get(i));
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (leafCase_ == 1) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, (tensorflow.decision_trees.GenericTreeModel.Vector) leaf_);
      }
      if (leafCase_ == 2) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, (tensorflow.decision_trees.GenericTreeModel.SparseVector) leaf_);
      }
      for (int i = 0; i < additionalData_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, additionalData_.get(i));
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.decision_trees.GenericTreeModel.Leaf)) {
        return super.equals(obj);
      }
      tensorflow.decision_trees.GenericTreeModel.Leaf other = (tensorflow.decision_trees.GenericTreeModel.Leaf) obj;

      boolean result = true;
      result = result && getAdditionalDataList()
          .equals(other.getAdditionalDataList());
      result = result && getLeafCase().equals(
          other.getLeafCase());
      if (!result) return false;
      switch (leafCase_) {
        case 1:
          result = result && getVector()
              .equals(other.getVector());
          break;
        case 2:
          result = result && getSparseVector()
              .equals(other.getSparseVector());
          break;
        case 0:
        default:
      }
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getAdditionalDataCount() > 0) {
        hash = (37 * hash) + ADDITIONAL_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getAdditionalDataList().hashCode();
      }
      switch (leafCase_) {
        case 1:
          hash = (37 * hash) + VECTOR_FIELD_NUMBER;
          hash = (53 * hash) + getVector().hashCode();
          break;
        case 2:
          hash = (37 * hash) + SPARSE_VECTOR_FIELD_NUMBER;
          hash = (53 * hash) + getSparseVector().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.decision_trees.GenericTreeModel.Leaf parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Leaf parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Leaf parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Leaf parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Leaf parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Leaf 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 tensorflow.decision_trees.GenericTreeModel.Leaf parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Leaf 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 tensorflow.decision_trees.GenericTreeModel.Leaf parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Leaf 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(tensorflow.decision_trees.GenericTreeModel.Leaf 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;
    }
    /**
     * Protobuf type {@code tensorflow.decision_trees.Leaf}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.decision_trees.Leaf)
        tensorflow.decision_trees.GenericTreeModel.LeafOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Leaf_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Leaf_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.decision_trees.GenericTreeModel.Leaf.class, tensorflow.decision_trees.GenericTreeModel.Leaf.Builder.class);
      }

      // Construct using tensorflow.decision_trees.GenericTreeModel.Leaf.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getAdditionalDataFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (additionalDataBuilder_ == null) {
          additionalData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          additionalDataBuilder_.clear();
        }
        leafCase_ = 0;
        leaf_ = null;
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Leaf_descriptor;
      }

      public tensorflow.decision_trees.GenericTreeModel.Leaf getDefaultInstanceForType() {
        return tensorflow.decision_trees.GenericTreeModel.Leaf.getDefaultInstance();
      }

      public tensorflow.decision_trees.GenericTreeModel.Leaf build() {
        tensorflow.decision_trees.GenericTreeModel.Leaf result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.decision_trees.GenericTreeModel.Leaf buildPartial() {
        tensorflow.decision_trees.GenericTreeModel.Leaf result = new tensorflow.decision_trees.GenericTreeModel.Leaf(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (leafCase_ == 1) {
          if (vectorBuilder_ == null) {
            result.leaf_ = leaf_;
          } else {
            result.leaf_ = vectorBuilder_.build();
          }
        }
        if (leafCase_ == 2) {
          if (sparseVectorBuilder_ == null) {
            result.leaf_ = leaf_;
          } else {
            result.leaf_ = sparseVectorBuilder_.build();
          }
        }
        if (additionalDataBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.additionalData_ = additionalData_;
        } else {
          result.additionalData_ = additionalDataBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        result.leafCase_ = leafCase_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          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, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.decision_trees.GenericTreeModel.Leaf) {
          return mergeFrom((tensorflow.decision_trees.GenericTreeModel.Leaf)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.decision_trees.GenericTreeModel.Leaf other) {
        if (other == tensorflow.decision_trees.GenericTreeModel.Leaf.getDefaultInstance()) return this;
        if (additionalDataBuilder_ == null) {
          if (!other.additionalData_.isEmpty()) {
            if (additionalData_.isEmpty()) {
              additionalData_ = other.additionalData_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureAdditionalDataIsMutable();
              additionalData_.addAll(other.additionalData_);
            }
            onChanged();
          }
        } else {
          if (!other.additionalData_.isEmpty()) {
            if (additionalDataBuilder_.isEmpty()) {
              additionalDataBuilder_.dispose();
              additionalDataBuilder_ = null;
              additionalData_ = other.additionalData_;
              bitField0_ = (bitField0_ & ~0x00000004);
              additionalDataBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getAdditionalDataFieldBuilder() : null;
            } else {
              additionalDataBuilder_.addAllMessages(other.additionalData_);
            }
          }
        }
        switch (other.getLeafCase()) {
          case VECTOR: {
            mergeVector(other.getVector());
            break;
          }
          case SPARSE_VECTOR: {
            mergeSparseVector(other.getSparseVector());
            break;
          }
          case LEAF_NOT_SET: {
            break;
          }
        }
        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 {
        tensorflow.decision_trees.GenericTreeModel.Leaf parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.decision_trees.GenericTreeModel.Leaf) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int leafCase_ = 0;
      private java.lang.Object leaf_;
      public LeafCase
          getLeafCase() {
        return LeafCase.forNumber(
            leafCase_);
      }

      public Builder clearLeaf() {
        leafCase_ = 0;
        leaf_ = null;
        onChanged();
        return this;
      }

      private int bitField0_;

      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.Vector, tensorflow.decision_trees.GenericTreeModel.Vector.Builder, tensorflow.decision_trees.GenericTreeModel.VectorOrBuilder> vectorBuilder_;
      /**
       * <pre>
       * The interpretation of the values held in the leaves of a decision tree
       * is application specific, but some common cases are:
       * 1) len(vector) = 1, and the floating point value[0] holds the class 0
       *    probability in a two class classification problem.
       * 2) len(vector) = 1, and the integer value[0] holds the class prediction.
       * 3) The floating point value[i] holds the class i probability prediction.
       * 4) The floating point value[i] holds the i-th component of the
       *    vector prediction in a regression problem.
       * 5) sparse_vector holds the sparse class predictions for a classification
       *    problem with a large number of classes.
       * </pre>
       *
       * <code>.tensorflow.decision_trees.Vector vector = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Vector getVector() {
        if (vectorBuilder_ == null) {
          if (leafCase_ == 1) {
            return (tensorflow.decision_trees.GenericTreeModel.Vector) leaf_;
          }
          return tensorflow.decision_trees.GenericTreeModel.Vector.getDefaultInstance();
        } else {
          if (leafCase_ == 1) {
            return vectorBuilder_.getMessage();
          }
          return tensorflow.decision_trees.GenericTreeModel.Vector.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * The interpretation of the values held in the leaves of a decision tree
       * is application specific, but some common cases are:
       * 1) len(vector) = 1, and the floating point value[0] holds the class 0
       *    probability in a two class classification problem.
       * 2) len(vector) = 1, and the integer value[0] holds the class prediction.
       * 3) The floating point value[i] holds the class i probability prediction.
       * 4) The floating point value[i] holds the i-th component of the
       *    vector prediction in a regression problem.
       * 5) sparse_vector holds the sparse class predictions for a classification
       *    problem with a large number of classes.
       * </pre>
       *
       * <code>.tensorflow.decision_trees.Vector vector = 1;</code>
       */
      public Builder setVector(tensorflow.decision_trees.GenericTreeModel.Vector value) {
        if (vectorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          leaf_ = value;
          onChanged();
        } else {
          vectorBuilder_.setMessage(value);
        }
        leafCase_ = 1;
        return this;
      }
      /**
       * <pre>
       * The interpretation of the values held in the leaves of a decision tree
       * is application specific, but some common cases are:
       * 1) len(vector) = 1, and the floating point value[0] holds the class 0
       *    probability in a two class classification problem.
       * 2) len(vector) = 1, and the integer value[0] holds the class prediction.
       * 3) The floating point value[i] holds the class i probability prediction.
       * 4) The floating point value[i] holds the i-th component of the
       *    vector prediction in a regression problem.
       * 5) sparse_vector holds the sparse class predictions for a classification
       *    problem with a large number of classes.
       * </pre>
       *
       * <code>.tensorflow.decision_trees.Vector vector = 1;</code>
       */
      public Builder setVector(
          tensorflow.decision_trees.GenericTreeModel.Vector.Builder builderForValue) {
        if (vectorBuilder_ == null) {
          leaf_ = builderForValue.build();
          onChanged();
        } else {
          vectorBuilder_.setMessage(builderForValue.build());
        }
        leafCase_ = 1;
        return this;
      }
      /**
       * <pre>
       * The interpretation of the values held in the leaves of a decision tree
       * is application specific, but some common cases are:
       * 1) len(vector) = 1, and the floating point value[0] holds the class 0
       *    probability in a two class classification problem.
       * 2) len(vector) = 1, and the integer value[0] holds the class prediction.
       * 3) The floating point value[i] holds the class i probability prediction.
       * 4) The floating point value[i] holds the i-th component of the
       *    vector prediction in a regression problem.
       * 5) sparse_vector holds the sparse class predictions for a classification
       *    problem with a large number of classes.
       * </pre>
       *
       * <code>.tensorflow.decision_trees.Vector vector = 1;</code>
       */
      public Builder mergeVector(tensorflow.decision_trees.GenericTreeModel.Vector value) {
        if (vectorBuilder_ == null) {
          if (leafCase_ == 1 &&
              leaf_ != tensorflow.decision_trees.GenericTreeModel.Vector.getDefaultInstance()) {
            leaf_ = tensorflow.decision_trees.GenericTreeModel.Vector.newBuilder((tensorflow.decision_trees.GenericTreeModel.Vector) leaf_)
                .mergeFrom(value).buildPartial();
          } else {
            leaf_ = value;
          }
          onChanged();
        } else {
          if (leafCase_ == 1) {
            vectorBuilder_.mergeFrom(value);
          }
          vectorBuilder_.setMessage(value);
        }
        leafCase_ = 1;
        return this;
      }
      /**
       * <pre>
       * The interpretation of the values held in the leaves of a decision tree
       * is application specific, but some common cases are:
       * 1) len(vector) = 1, and the floating point value[0] holds the class 0
       *    probability in a two class classification problem.
       * 2) len(vector) = 1, and the integer value[0] holds the class prediction.
       * 3) The floating point value[i] holds the class i probability prediction.
       * 4) The floating point value[i] holds the i-th component of the
       *    vector prediction in a regression problem.
       * 5) sparse_vector holds the sparse class predictions for a classification
       *    problem with a large number of classes.
       * </pre>
       *
       * <code>.tensorflow.decision_trees.Vector vector = 1;</code>
       */
      public Builder clearVector() {
        if (vectorBuilder_ == null) {
          if (leafCase_ == 1) {
            leafCase_ = 0;
            leaf_ = null;
            onChanged();
          }
        } else {
          if (leafCase_ == 1) {
            leafCase_ = 0;
            leaf_ = null;
          }
          vectorBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * The interpretation of the values held in the leaves of a decision tree
       * is application specific, but some common cases are:
       * 1) len(vector) = 1, and the floating point value[0] holds the class 0
       *    probability in a two class classification problem.
       * 2) len(vector) = 1, and the integer value[0] holds the class prediction.
       * 3) The floating point value[i] holds the class i probability prediction.
       * 4) The floating point value[i] holds the i-th component of the
       *    vector prediction in a regression problem.
       * 5) sparse_vector holds the sparse class predictions for a classification
       *    problem with a large number of classes.
       * </pre>
       *
       * <code>.tensorflow.decision_trees.Vector vector = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Vector.Builder getVectorBuilder() {
        return getVectorFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * The interpretation of the values held in the leaves of a decision tree
       * is application specific, but some common cases are:
       * 1) len(vector) = 1, and the floating point value[0] holds the class 0
       *    probability in a two class classification problem.
       * 2) len(vector) = 1, and the integer value[0] holds the class prediction.
       * 3) The floating point value[i] holds the class i probability prediction.
       * 4) The floating point value[i] holds the i-th component of the
       *    vector prediction in a regression problem.
       * 5) sparse_vector holds the sparse class predictions for a classification
       *    problem with a large number of classes.
       * </pre>
       *
       * <code>.tensorflow.decision_trees.Vector vector = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.VectorOrBuilder getVectorOrBuilder() {
        if ((leafCase_ == 1) && (vectorBuilder_ != null)) {
          return vectorBuilder_.getMessageOrBuilder();
        } else {
          if (leafCase_ == 1) {
            return (tensorflow.decision_trees.GenericTreeModel.Vector) leaf_;
          }
          return tensorflow.decision_trees.GenericTreeModel.Vector.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * The interpretation of the values held in the leaves of a decision tree
       * is application specific, but some common cases are:
       * 1) len(vector) = 1, and the floating point value[0] holds the class 0
       *    probability in a two class classification problem.
       * 2) len(vector) = 1, and the integer value[0] holds the class prediction.
       * 3) The floating point value[i] holds the class i probability prediction.
       * 4) The floating point value[i] holds the i-th component of the
       *    vector prediction in a regression problem.
       * 5) sparse_vector holds the sparse class predictions for a classification
       *    problem with a large number of classes.
       * </pre>
       *
       * <code>.tensorflow.decision_trees.Vector vector = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.Vector, tensorflow.decision_trees.GenericTreeModel.Vector.Builder, tensorflow.decision_trees.GenericTreeModel.VectorOrBuilder> 
          getVectorFieldBuilder() {
        if (vectorBuilder_ == null) {
          if (!(leafCase_ == 1)) {
            leaf_ = tensorflow.decision_trees.GenericTreeModel.Vector.getDefaultInstance();
          }
          vectorBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              tensorflow.decision_trees.GenericTreeModel.Vector, tensorflow.decision_trees.GenericTreeModel.Vector.Builder, tensorflow.decision_trees.GenericTreeModel.VectorOrBuilder>(
                  (tensorflow.decision_trees.GenericTreeModel.Vector) leaf_,
                  getParentForChildren(),
                  isClean());
          leaf_ = null;
        }
        leafCase_ = 1;
        onChanged();;
        return vectorBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.SparseVector, tensorflow.decision_trees.GenericTreeModel.SparseVector.Builder, tensorflow.decision_trees.GenericTreeModel.SparseVectorOrBuilder> sparseVectorBuilder_;
      /**
       * <code>.tensorflow.decision_trees.SparseVector sparse_vector = 2;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.SparseVector getSparseVector() {
        if (sparseVectorBuilder_ == null) {
          if (leafCase_ == 2) {
            return (tensorflow.decision_trees.GenericTreeModel.SparseVector) leaf_;
          }
          return tensorflow.decision_trees.GenericTreeModel.SparseVector.getDefaultInstance();
        } else {
          if (leafCase_ == 2) {
            return sparseVectorBuilder_.getMessage();
          }
          return tensorflow.decision_trees.GenericTreeModel.SparseVector.getDefaultInstance();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.SparseVector sparse_vector = 2;</code>
       */
      public Builder setSparseVector(tensorflow.decision_trees.GenericTreeModel.SparseVector value) {
        if (sparseVectorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          leaf_ = value;
          onChanged();
        } else {
          sparseVectorBuilder_.setMessage(value);
        }
        leafCase_ = 2;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.SparseVector sparse_vector = 2;</code>
       */
      public Builder setSparseVector(
          tensorflow.decision_trees.GenericTreeModel.SparseVector.Builder builderForValue) {
        if (sparseVectorBuilder_ == null) {
          leaf_ = builderForValue.build();
          onChanged();
        } else {
          sparseVectorBuilder_.setMessage(builderForValue.build());
        }
        leafCase_ = 2;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.SparseVector sparse_vector = 2;</code>
       */
      public Builder mergeSparseVector(tensorflow.decision_trees.GenericTreeModel.SparseVector value) {
        if (sparseVectorBuilder_ == null) {
          if (leafCase_ == 2 &&
              leaf_ != tensorflow.decision_trees.GenericTreeModel.SparseVector.getDefaultInstance()) {
            leaf_ = tensorflow.decision_trees.GenericTreeModel.SparseVector.newBuilder((tensorflow.decision_trees.GenericTreeModel.SparseVector) leaf_)
                .mergeFrom(value).buildPartial();
          } else {
            leaf_ = value;
          }
          onChanged();
        } else {
          if (leafCase_ == 2) {
            sparseVectorBuilder_.mergeFrom(value);
          }
          sparseVectorBuilder_.setMessage(value);
        }
        leafCase_ = 2;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.SparseVector sparse_vector = 2;</code>
       */
      public Builder clearSparseVector() {
        if (sparseVectorBuilder_ == null) {
          if (leafCase_ == 2) {
            leafCase_ = 0;
            leaf_ = null;
            onChanged();
          }
        } else {
          if (leafCase_ == 2) {
            leafCase_ = 0;
            leaf_ = null;
          }
          sparseVectorBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.SparseVector sparse_vector = 2;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.SparseVector.Builder getSparseVectorBuilder() {
        return getSparseVectorFieldBuilder().getBuilder();
      }
      /**
       * <code>.tensorflow.decision_trees.SparseVector sparse_vector = 2;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.SparseVectorOrBuilder getSparseVectorOrBuilder() {
        if ((leafCase_ == 2) && (sparseVectorBuilder_ != null)) {
          return sparseVectorBuilder_.getMessageOrBuilder();
        } else {
          if (leafCase_ == 2) {
            return (tensorflow.decision_trees.GenericTreeModel.SparseVector) leaf_;
          }
          return tensorflow.decision_trees.GenericTreeModel.SparseVector.getDefaultInstance();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.SparseVector sparse_vector = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.SparseVector, tensorflow.decision_trees.GenericTreeModel.SparseVector.Builder, tensorflow.decision_trees.GenericTreeModel.SparseVectorOrBuilder> 
          getSparseVectorFieldBuilder() {
        if (sparseVectorBuilder_ == null) {
          if (!(leafCase_ == 2)) {
            leaf_ = tensorflow.decision_trees.GenericTreeModel.SparseVector.getDefaultInstance();
          }
          sparseVectorBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              tensorflow.decision_trees.GenericTreeModel.SparseVector, tensorflow.decision_trees.GenericTreeModel.SparseVector.Builder, tensorflow.decision_trees.GenericTreeModel.SparseVectorOrBuilder>(
                  (tensorflow.decision_trees.GenericTreeModel.SparseVector) leaf_,
                  getParentForChildren(),
                  isClean());
          leaf_ = null;
        }
        leafCase_ = 2;
        onChanged();;
        return sparseVectorBuilder_;
      }

      private java.util.List<com.google.protobuf.Any> additionalData_ =
        java.util.Collections.emptyList();
      private void ensureAdditionalDataIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>(additionalData_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> additionalDataBuilder_;

      /**
       * <pre>
       * For non-standard handling of leaves.
       * </pre>
       *
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
        if (additionalDataBuilder_ == null) {
          return java.util.Collections.unmodifiableList(additionalData_);
        } else {
          return additionalDataBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * For non-standard handling of leaves.
       * </pre>
       *
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public int getAdditionalDataCount() {
        if (additionalDataBuilder_ == null) {
          return additionalData_.size();
        } else {
          return additionalDataBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * For non-standard handling of leaves.
       * </pre>
       *
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public com.google.protobuf.Any getAdditionalData(int index) {
        if (additionalDataBuilder_ == null) {
          return additionalData_.get(index);
        } else {
          return additionalDataBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * For non-standard handling of leaves.
       * </pre>
       *
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public Builder setAdditionalData(
          int index, com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.set(index, value);
          onChanged();
        } else {
          additionalDataBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * For non-standard handling of leaves.
       * </pre>
       *
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public Builder setAdditionalData(
          int index, com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.set(index, builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * For non-standard handling of leaves.
       * </pre>
       *
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public Builder addAdditionalData(com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.add(value);
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * For non-standard handling of leaves.
       * </pre>
       *
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public Builder addAdditionalData(
          int index, com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.add(index, value);
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * For non-standard handling of leaves.
       * </pre>
       *
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public Builder addAdditionalData(
          com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.add(builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * For non-standard handling of leaves.
       * </pre>
       *
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public Builder addAdditionalData(
          int index, com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.add(index, builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * For non-standard handling of leaves.
       * </pre>
       *
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public Builder addAllAdditionalData(
          java.lang.Iterable<? extends com.google.protobuf.Any> values) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, additionalData_);
          onChanged();
        } else {
          additionalDataBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * For non-standard handling of leaves.
       * </pre>
       *
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public Builder clearAdditionalData() {
        if (additionalDataBuilder_ == null) {
          additionalData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          additionalDataBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * For non-standard handling of leaves.
       * </pre>
       *
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public Builder removeAdditionalData(int index) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.remove(index);
          onChanged();
        } else {
          additionalDataBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * For non-standard handling of leaves.
       * </pre>
       *
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public com.google.protobuf.Any.Builder getAdditionalDataBuilder(
          int index) {
        return getAdditionalDataFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * For non-standard handling of leaves.
       * </pre>
       *
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
          int index) {
        if (additionalDataBuilder_ == null) {
          return additionalData_.get(index);  } else {
          return additionalDataBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * For non-standard handling of leaves.
       * </pre>
       *
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
           getAdditionalDataOrBuilderList() {
        if (additionalDataBuilder_ != null) {
          return additionalDataBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(additionalData_);
        }
      }
      /**
       * <pre>
       * For non-standard handling of leaves.
       * </pre>
       *
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public com.google.protobuf.Any.Builder addAdditionalDataBuilder() {
        return getAdditionalDataFieldBuilder().addBuilder(
            com.google.protobuf.Any.getDefaultInstance());
      }
      /**
       * <pre>
       * For non-standard handling of leaves.
       * </pre>
       *
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public com.google.protobuf.Any.Builder addAdditionalDataBuilder(
          int index) {
        return getAdditionalDataFieldBuilder().addBuilder(
            index, com.google.protobuf.Any.getDefaultInstance());
      }
      /**
       * <pre>
       * For non-standard handling of leaves.
       * </pre>
       *
       * <code>repeated .google.protobuf.Any additional_data = 3;</code>
       */
      public java.util.List<com.google.protobuf.Any.Builder> 
           getAdditionalDataBuilderList() {
        return getAdditionalDataFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> 
          getAdditionalDataFieldBuilder() {
        if (additionalDataBuilder_ == null) {
          additionalDataBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder>(
                  additionalData_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          additionalData_ = null;
        }
        return additionalDataBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.decision_trees.Leaf)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.decision_trees.Leaf)
    private static final tensorflow.decision_trees.GenericTreeModel.Leaf DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.decision_trees.GenericTreeModel.Leaf();
    }

    public static tensorflow.decision_trees.GenericTreeModel.Leaf getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public tensorflow.decision_trees.GenericTreeModel.Leaf getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface FeatureIdOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.decision_trees.FeatureId)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.google.protobuf.StringValue id = 1;</code>
     */
    boolean hasId();
    /**
     * <code>.google.protobuf.StringValue id = 1;</code>
     */
    com.google.protobuf.StringValue getId();
    /**
     * <code>.google.protobuf.StringValue id = 1;</code>
     */
    com.google.protobuf.StringValueOrBuilder getIdOrBuilder();

    /**
     * <code>repeated .google.protobuf.Any additional_data = 2;</code>
     */
    java.util.List<com.google.protobuf.Any> 
        getAdditionalDataList();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 2;</code>
     */
    com.google.protobuf.Any getAdditionalData(int index);
    /**
     * <code>repeated .google.protobuf.Any additional_data = 2;</code>
     */
    int getAdditionalDataCount();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 2;</code>
     */
    java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
        getAdditionalDataOrBuilderList();
    /**
     * <code>repeated .google.protobuf.Any additional_data = 2;</code>
     */
    com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code tensorflow.decision_trees.FeatureId}
   */
  public  static final class FeatureId extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.decision_trees.FeatureId)
      FeatureIdOrBuilder {
    // Use FeatureId.newBuilder() to construct.
    private FeatureId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private FeatureId() {
      additionalData_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private FeatureId(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.StringValue.Builder subBuilder = null;
              if (id_ != null) {
                subBuilder = id_.toBuilder();
              }
              id_ = input.readMessage(com.google.protobuf.StringValue.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(id_);
                id_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>();
                mutable_bitField0_ |= 0x00000002;
              }
              additionalData_.add(
                  input.readMessage(com.google.protobuf.Any.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_ & 0x00000002) == 0x00000002)) {
          additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
        }
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_FeatureId_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_FeatureId_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.decision_trees.GenericTreeModel.FeatureId.class, tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder.class);
    }

    private int bitField0_;
    public static final int ID_FIELD_NUMBER = 1;
    private com.google.protobuf.StringValue id_;
    /**
     * <code>.google.protobuf.StringValue id = 1;</code>
     */
    public boolean hasId() {
      return id_ != null;
    }
    /**
     * <code>.google.protobuf.StringValue id = 1;</code>
     */
    public com.google.protobuf.StringValue getId() {
      return id_ == null ? com.google.protobuf.StringValue.getDefaultInstance() : id_;
    }
    /**
     * <code>.google.protobuf.StringValue id = 1;</code>
     */
    public com.google.protobuf.StringValueOrBuilder getIdOrBuilder() {
      return getId();
    }

    public static final int ADDITIONAL_DATA_FIELD_NUMBER = 2;
    private java.util.List<com.google.protobuf.Any> additionalData_;
    /**
     * <code>repeated .google.protobuf.Any additional_data = 2;</code>
     */
    public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
      return additionalData_;
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 2;</code>
     */
    public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
        getAdditionalDataOrBuilderList() {
      return additionalData_;
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 2;</code>
     */
    public int getAdditionalDataCount() {
      return additionalData_.size();
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 2;</code>
     */
    public com.google.protobuf.Any getAdditionalData(int index) {
      return additionalData_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.Any additional_data = 2;</code>
     */
    public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
        int index) {
      return additionalData_.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 {
      if (id_ != null) {
        output.writeMessage(1, getId());
      }
      for (int i = 0; i < additionalData_.size(); i++) {
        output.writeMessage(2, additionalData_.get(i));
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (id_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getId());
      }
      for (int i = 0; i < additionalData_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, additionalData_.get(i));
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.decision_trees.GenericTreeModel.FeatureId)) {
        return super.equals(obj);
      }
      tensorflow.decision_trees.GenericTreeModel.FeatureId other = (tensorflow.decision_trees.GenericTreeModel.FeatureId) obj;

      boolean result = true;
      result = result && (hasId() == other.hasId());
      if (hasId()) {
        result = result && getId()
            .equals(other.getId());
      }
      result = result && getAdditionalDataList()
          .equals(other.getAdditionalDataList());
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasId()) {
        hash = (37 * hash) + ID_FIELD_NUMBER;
        hash = (53 * hash) + getId().hashCode();
      }
      if (getAdditionalDataCount() > 0) {
        hash = (37 * hash) + ADDITIONAL_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getAdditionalDataList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.decision_trees.GenericTreeModel.FeatureId parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.FeatureId parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.FeatureId parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.FeatureId parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.FeatureId parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.FeatureId 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 tensorflow.decision_trees.GenericTreeModel.FeatureId parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.FeatureId 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 tensorflow.decision_trees.GenericTreeModel.FeatureId parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.FeatureId 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(tensorflow.decision_trees.GenericTreeModel.FeatureId 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;
    }
    /**
     * Protobuf type {@code tensorflow.decision_trees.FeatureId}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.decision_trees.FeatureId)
        tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_FeatureId_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_FeatureId_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.decision_trees.GenericTreeModel.FeatureId.class, tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder.class);
      }

      // Construct using tensorflow.decision_trees.GenericTreeModel.FeatureId.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getAdditionalDataFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (idBuilder_ == null) {
          id_ = null;
        } else {
          id_ = null;
          idBuilder_ = null;
        }
        if (additionalDataBuilder_ == null) {
          additionalData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          additionalDataBuilder_.clear();
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_FeatureId_descriptor;
      }

      public tensorflow.decision_trees.GenericTreeModel.FeatureId getDefaultInstanceForType() {
        return tensorflow.decision_trees.GenericTreeModel.FeatureId.getDefaultInstance();
      }

      public tensorflow.decision_trees.GenericTreeModel.FeatureId build() {
        tensorflow.decision_trees.GenericTreeModel.FeatureId result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.decision_trees.GenericTreeModel.FeatureId buildPartial() {
        tensorflow.decision_trees.GenericTreeModel.FeatureId result = new tensorflow.decision_trees.GenericTreeModel.FeatureId(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (idBuilder_ == null) {
          result.id_ = id_;
        } else {
          result.id_ = idBuilder_.build();
        }
        if (additionalDataBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            additionalData_ = java.util.Collections.unmodifiableList(additionalData_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.additionalData_ = additionalData_;
        } else {
          result.additionalData_ = additionalDataBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          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, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.decision_trees.GenericTreeModel.FeatureId) {
          return mergeFrom((tensorflow.decision_trees.GenericTreeModel.FeatureId)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.decision_trees.GenericTreeModel.FeatureId other) {
        if (other == tensorflow.decision_trees.GenericTreeModel.FeatureId.getDefaultInstance()) return this;
        if (other.hasId()) {
          mergeId(other.getId());
        }
        if (additionalDataBuilder_ == null) {
          if (!other.additionalData_.isEmpty()) {
            if (additionalData_.isEmpty()) {
              additionalData_ = other.additionalData_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureAdditionalDataIsMutable();
              additionalData_.addAll(other.additionalData_);
            }
            onChanged();
          }
        } else {
          if (!other.additionalData_.isEmpty()) {
            if (additionalDataBuilder_.isEmpty()) {
              additionalDataBuilder_.dispose();
              additionalDataBuilder_ = null;
              additionalData_ = other.additionalData_;
              bitField0_ = (bitField0_ & ~0x00000002);
              additionalDataBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getAdditionalDataFieldBuilder() : null;
            } else {
              additionalDataBuilder_.addAllMessages(other.additionalData_);
            }
          }
        }
        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 {
        tensorflow.decision_trees.GenericTreeModel.FeatureId parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.decision_trees.GenericTreeModel.FeatureId) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.protobuf.StringValue id_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.StringValue, com.google.protobuf.StringValue.Builder, com.google.protobuf.StringValueOrBuilder> idBuilder_;
      /**
       * <code>.google.protobuf.StringValue id = 1;</code>
       */
      public boolean hasId() {
        return idBuilder_ != null || id_ != null;
      }
      /**
       * <code>.google.protobuf.StringValue id = 1;</code>
       */
      public com.google.protobuf.StringValue getId() {
        if (idBuilder_ == null) {
          return id_ == null ? com.google.protobuf.StringValue.getDefaultInstance() : id_;
        } else {
          return idBuilder_.getMessage();
        }
      }
      /**
       * <code>.google.protobuf.StringValue id = 1;</code>
       */
      public Builder setId(com.google.protobuf.StringValue value) {
        if (idBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          id_ = value;
          onChanged();
        } else {
          idBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.google.protobuf.StringValue id = 1;</code>
       */
      public Builder setId(
          com.google.protobuf.StringValue.Builder builderForValue) {
        if (idBuilder_ == null) {
          id_ = builderForValue.build();
          onChanged();
        } else {
          idBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.google.protobuf.StringValue id = 1;</code>
       */
      public Builder mergeId(com.google.protobuf.StringValue value) {
        if (idBuilder_ == null) {
          if (id_ != null) {
            id_ =
              com.google.protobuf.StringValue.newBuilder(id_).mergeFrom(value).buildPartial();
          } else {
            id_ = value;
          }
          onChanged();
        } else {
          idBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.google.protobuf.StringValue id = 1;</code>
       */
      public Builder clearId() {
        if (idBuilder_ == null) {
          id_ = null;
          onChanged();
        } else {
          id_ = null;
          idBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.google.protobuf.StringValue id = 1;</code>
       */
      public com.google.protobuf.StringValue.Builder getIdBuilder() {
        
        onChanged();
        return getIdFieldBuilder().getBuilder();
      }
      /**
       * <code>.google.protobuf.StringValue id = 1;</code>
       */
      public com.google.protobuf.StringValueOrBuilder getIdOrBuilder() {
        if (idBuilder_ != null) {
          return idBuilder_.getMessageOrBuilder();
        } else {
          return id_ == null ?
              com.google.protobuf.StringValue.getDefaultInstance() : id_;
        }
      }
      /**
       * <code>.google.protobuf.StringValue id = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.StringValue, com.google.protobuf.StringValue.Builder, com.google.protobuf.StringValueOrBuilder> 
          getIdFieldBuilder() {
        if (idBuilder_ == null) {
          idBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.StringValue, com.google.protobuf.StringValue.Builder, com.google.protobuf.StringValueOrBuilder>(
                  getId(),
                  getParentForChildren(),
                  isClean());
          id_ = null;
        }
        return idBuilder_;
      }

      private java.util.List<com.google.protobuf.Any> additionalData_ =
        java.util.Collections.emptyList();
      private void ensureAdditionalDataIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          additionalData_ = new java.util.ArrayList<com.google.protobuf.Any>(additionalData_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> additionalDataBuilder_;

      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public java.util.List<com.google.protobuf.Any> getAdditionalDataList() {
        if (additionalDataBuilder_ == null) {
          return java.util.Collections.unmodifiableList(additionalData_);
        } else {
          return additionalDataBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public int getAdditionalDataCount() {
        if (additionalDataBuilder_ == null) {
          return additionalData_.size();
        } else {
          return additionalDataBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public com.google.protobuf.Any getAdditionalData(int index) {
        if (additionalDataBuilder_ == null) {
          return additionalData_.get(index);
        } else {
          return additionalDataBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public Builder setAdditionalData(
          int index, com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.set(index, value);
          onChanged();
        } else {
          additionalDataBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public Builder setAdditionalData(
          int index, com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.set(index, builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public Builder addAdditionalData(com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.add(value);
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public Builder addAdditionalData(
          int index, com.google.protobuf.Any value) {
        if (additionalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalDataIsMutable();
          additionalData_.add(index, value);
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public Builder addAdditionalData(
          com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.add(builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public Builder addAdditionalData(
          int index, com.google.protobuf.Any.Builder builderForValue) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.add(index, builderForValue.build());
          onChanged();
        } else {
          additionalDataBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public Builder addAllAdditionalData(
          java.lang.Iterable<? extends com.google.protobuf.Any> values) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, additionalData_);
          onChanged();
        } else {
          additionalDataBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public Builder clearAdditionalData() {
        if (additionalDataBuilder_ == null) {
          additionalData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          additionalDataBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public Builder removeAdditionalData(int index) {
        if (additionalDataBuilder_ == null) {
          ensureAdditionalDataIsMutable();
          additionalData_.remove(index);
          onChanged();
        } else {
          additionalDataBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public com.google.protobuf.Any.Builder getAdditionalDataBuilder(
          int index) {
        return getAdditionalDataFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public com.google.protobuf.AnyOrBuilder getAdditionalDataOrBuilder(
          int index) {
        if (additionalDataBuilder_ == null) {
          return additionalData_.get(index);  } else {
          return additionalDataBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public java.util.List<? extends com.google.protobuf.AnyOrBuilder> 
           getAdditionalDataOrBuilderList() {
        if (additionalDataBuilder_ != null) {
          return additionalDataBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(additionalData_);
        }
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public com.google.protobuf.Any.Builder addAdditionalDataBuilder() {
        return getAdditionalDataFieldBuilder().addBuilder(
            com.google.protobuf.Any.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public com.google.protobuf.Any.Builder addAdditionalDataBuilder(
          int index) {
        return getAdditionalDataFieldBuilder().addBuilder(
            index, com.google.protobuf.Any.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.Any additional_data = 2;</code>
       */
      public java.util.List<com.google.protobuf.Any.Builder> 
           getAdditionalDataBuilderList() {
        return getAdditionalDataFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> 
          getAdditionalDataFieldBuilder() {
        if (additionalDataBuilder_ == null) {
          additionalDataBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder>(
                  additionalData_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          additionalData_ = null;
        }
        return additionalDataBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.decision_trees.FeatureId)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.decision_trees.FeatureId)
    private static final tensorflow.decision_trees.GenericTreeModel.FeatureId DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.decision_trees.GenericTreeModel.FeatureId();
    }

    public static tensorflow.decision_trees.GenericTreeModel.FeatureId getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public tensorflow.decision_trees.GenericTreeModel.FeatureId getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ObliqueFeaturesOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.decision_trees.ObliqueFeatures)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * total value is sum(features[i] * weights[i]).
     * </pre>
     *
     * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
     */
    java.util.List<tensorflow.decision_trees.GenericTreeModel.FeatureId> 
        getFeaturesList();
    /**
     * <pre>
     * total value is sum(features[i] * weights[i]).
     * </pre>
     *
     * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.FeatureId getFeatures(int index);
    /**
     * <pre>
     * total value is sum(features[i] * weights[i]).
     * </pre>
     *
     * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
     */
    int getFeaturesCount();
    /**
     * <pre>
     * total value is sum(features[i] * weights[i]).
     * </pre>
     *
     * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
     */
    java.util.List<? extends tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder> 
        getFeaturesOrBuilderList();
    /**
     * <pre>
     * total value is sum(features[i] * weights[i]).
     * </pre>
     *
     * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder getFeaturesOrBuilder(
        int index);

    /**
     * <code>repeated float weights = 2;</code>
     */
    java.util.List<java.lang.Float> getWeightsList();
    /**
     * <code>repeated float weights = 2;</code>
     */
    int getWeightsCount();
    /**
     * <code>repeated float weights = 2;</code>
     */
    float getWeights(int index);
  }
  /**
   * Protobuf type {@code tensorflow.decision_trees.ObliqueFeatures}
   */
  public  static final class ObliqueFeatures extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.decision_trees.ObliqueFeatures)
      ObliqueFeaturesOrBuilder {
    // Use ObliqueFeatures.newBuilder() to construct.
    private ObliqueFeatures(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ObliqueFeatures() {
      features_ = java.util.Collections.emptyList();
      weights_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private ObliqueFeatures(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                features_ = new java.util.ArrayList<tensorflow.decision_trees.GenericTreeModel.FeatureId>();
                mutable_bitField0_ |= 0x00000001;
              }
              features_.add(
                  input.readMessage(tensorflow.decision_trees.GenericTreeModel.FeatureId.parser(), extensionRegistry));
              break;
            }
            case 21: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                weights_ = new java.util.ArrayList<java.lang.Float>();
                mutable_bitField0_ |= 0x00000002;
              }
              weights_.add(input.readFloat());
              break;
            }
            case 18: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002) && input.getBytesUntilLimit() > 0) {
                weights_ = new java.util.ArrayList<java.lang.Float>();
                mutable_bitField0_ |= 0x00000002;
              }
              while (input.getBytesUntilLimit() > 0) {
                weights_.add(input.readFloat());
              }
              input.popLimit(limit);
              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)) {
          features_ = java.util.Collections.unmodifiableList(features_);
        }
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          weights_ = java.util.Collections.unmodifiableList(weights_);
        }
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_ObliqueFeatures_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_ObliqueFeatures_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.class, tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.Builder.class);
    }

    public static final int FEATURES_FIELD_NUMBER = 1;
    private java.util.List<tensorflow.decision_trees.GenericTreeModel.FeatureId> features_;
    /**
     * <pre>
     * total value is sum(features[i] * weights[i]).
     * </pre>
     *
     * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
     */
    public java.util.List<tensorflow.decision_trees.GenericTreeModel.FeatureId> getFeaturesList() {
      return features_;
    }
    /**
     * <pre>
     * total value is sum(features[i] * weights[i]).
     * </pre>
     *
     * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
     */
    public java.util.List<? extends tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder> 
        getFeaturesOrBuilderList() {
      return features_;
    }
    /**
     * <pre>
     * total value is sum(features[i] * weights[i]).
     * </pre>
     *
     * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
     */
    public int getFeaturesCount() {
      return features_.size();
    }
    /**
     * <pre>
     * total value is sum(features[i] * weights[i]).
     * </pre>
     *
     * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.FeatureId getFeatures(int index) {
      return features_.get(index);
    }
    /**
     * <pre>
     * total value is sum(features[i] * weights[i]).
     * </pre>
     *
     * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder getFeaturesOrBuilder(
        int index) {
      return features_.get(index);
    }

    public static final int WEIGHTS_FIELD_NUMBER = 2;
    private java.util.List<java.lang.Float> weights_;
    /**
     * <code>repeated float weights = 2;</code>
     */
    public java.util.List<java.lang.Float>
        getWeightsList() {
      return weights_;
    }
    /**
     * <code>repeated float weights = 2;</code>
     */
    public int getWeightsCount() {
      return weights_.size();
    }
    /**
     * <code>repeated float weights = 2;</code>
     */
    public float getWeights(int index) {
      return weights_.get(index);
    }
    private int weightsMemoizedSerializedSize = -1;

    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 {
      getSerializedSize();
      for (int i = 0; i < features_.size(); i++) {
        output.writeMessage(1, features_.get(i));
      }
      if (getWeightsList().size() > 0) {
        output.writeUInt32NoTag(18);
        output.writeUInt32NoTag(weightsMemoizedSerializedSize);
      }
      for (int i = 0; i < weights_.size(); i++) {
        output.writeFloatNoTag(weights_.get(i));
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < features_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, features_.get(i));
      }
      {
        int dataSize = 0;
        dataSize = 4 * getWeightsList().size();
        size += dataSize;
        if (!getWeightsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        weightsMemoizedSerializedSize = dataSize;
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures)) {
        return super.equals(obj);
      }
      tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures other = (tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures) obj;

      boolean result = true;
      result = result && getFeaturesList()
          .equals(other.getFeaturesList());
      result = result && getWeightsList()
          .equals(other.getWeightsList());
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getFeaturesCount() > 0) {
        hash = (37 * hash) + FEATURES_FIELD_NUMBER;
        hash = (53 * hash) + getFeaturesList().hashCode();
      }
      if (getWeightsCount() > 0) {
        hash = (37 * hash) + WEIGHTS_FIELD_NUMBER;
        hash = (53 * hash) + getWeightsList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures 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 tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures 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 tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures 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(tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures 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;
    }
    /**
     * Protobuf type {@code tensorflow.decision_trees.ObliqueFeatures}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.decision_trees.ObliqueFeatures)
        tensorflow.decision_trees.GenericTreeModel.ObliqueFeaturesOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_ObliqueFeatures_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_ObliqueFeatures_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.class, tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.Builder.class);
      }

      // Construct using tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getFeaturesFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (featuresBuilder_ == null) {
          features_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          featuresBuilder_.clear();
        }
        weights_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_ObliqueFeatures_descriptor;
      }

      public tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures getDefaultInstanceForType() {
        return tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.getDefaultInstance();
      }

      public tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures build() {
        tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures buildPartial() {
        tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures result = new tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures(this);
        int from_bitField0_ = bitField0_;
        if (featuresBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            features_ = java.util.Collections.unmodifiableList(features_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.features_ = features_;
        } else {
          result.features_ = featuresBuilder_.build();
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          weights_ = java.util.Collections.unmodifiableList(weights_);
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.weights_ = weights_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          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, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures) {
          return mergeFrom((tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures other) {
        if (other == tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.getDefaultInstance()) return this;
        if (featuresBuilder_ == null) {
          if (!other.features_.isEmpty()) {
            if (features_.isEmpty()) {
              features_ = other.features_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureFeaturesIsMutable();
              features_.addAll(other.features_);
            }
            onChanged();
          }
        } else {
          if (!other.features_.isEmpty()) {
            if (featuresBuilder_.isEmpty()) {
              featuresBuilder_.dispose();
              featuresBuilder_ = null;
              features_ = other.features_;
              bitField0_ = (bitField0_ & ~0x00000001);
              featuresBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getFeaturesFieldBuilder() : null;
            } else {
              featuresBuilder_.addAllMessages(other.features_);
            }
          }
        }
        if (!other.weights_.isEmpty()) {
          if (weights_.isEmpty()) {
            weights_ = other.weights_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureWeightsIsMutable();
            weights_.addAll(other.weights_);
          }
          onChanged();
        }
        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 {
        tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<tensorflow.decision_trees.GenericTreeModel.FeatureId> features_ =
        java.util.Collections.emptyList();
      private void ensureFeaturesIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          features_ = new java.util.ArrayList<tensorflow.decision_trees.GenericTreeModel.FeatureId>(features_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.FeatureId, tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder, tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder> featuresBuilder_;

      /**
       * <pre>
       * total value is sum(features[i] * weights[i]).
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
       */
      public java.util.List<tensorflow.decision_trees.GenericTreeModel.FeatureId> getFeaturesList() {
        if (featuresBuilder_ == null) {
          return java.util.Collections.unmodifiableList(features_);
        } else {
          return featuresBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * total value is sum(features[i] * weights[i]).
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
       */
      public int getFeaturesCount() {
        if (featuresBuilder_ == null) {
          return features_.size();
        } else {
          return featuresBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * total value is sum(features[i] * weights[i]).
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.FeatureId getFeatures(int index) {
        if (featuresBuilder_ == null) {
          return features_.get(index);
        } else {
          return featuresBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * total value is sum(features[i] * weights[i]).
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
       */
      public Builder setFeatures(
          int index, tensorflow.decision_trees.GenericTreeModel.FeatureId value) {
        if (featuresBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFeaturesIsMutable();
          features_.set(index, value);
          onChanged();
        } else {
          featuresBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * total value is sum(features[i] * weights[i]).
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
       */
      public Builder setFeatures(
          int index, tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder builderForValue) {
        if (featuresBuilder_ == null) {
          ensureFeaturesIsMutable();
          features_.set(index, builderForValue.build());
          onChanged();
        } else {
          featuresBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * total value is sum(features[i] * weights[i]).
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
       */
      public Builder addFeatures(tensorflow.decision_trees.GenericTreeModel.FeatureId value) {
        if (featuresBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFeaturesIsMutable();
          features_.add(value);
          onChanged();
        } else {
          featuresBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * total value is sum(features[i] * weights[i]).
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
       */
      public Builder addFeatures(
          int index, tensorflow.decision_trees.GenericTreeModel.FeatureId value) {
        if (featuresBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFeaturesIsMutable();
          features_.add(index, value);
          onChanged();
        } else {
          featuresBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * total value is sum(features[i] * weights[i]).
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
       */
      public Builder addFeatures(
          tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder builderForValue) {
        if (featuresBuilder_ == null) {
          ensureFeaturesIsMutable();
          features_.add(builderForValue.build());
          onChanged();
        } else {
          featuresBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * total value is sum(features[i] * weights[i]).
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
       */
      public Builder addFeatures(
          int index, tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder builderForValue) {
        if (featuresBuilder_ == null) {
          ensureFeaturesIsMutable();
          features_.add(index, builderForValue.build());
          onChanged();
        } else {
          featuresBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * total value is sum(features[i] * weights[i]).
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
       */
      public Builder addAllFeatures(
          java.lang.Iterable<? extends tensorflow.decision_trees.GenericTreeModel.FeatureId> values) {
        if (featuresBuilder_ == null) {
          ensureFeaturesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, features_);
          onChanged();
        } else {
          featuresBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * total value is sum(features[i] * weights[i]).
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
       */
      public Builder clearFeatures() {
        if (featuresBuilder_ == null) {
          features_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          featuresBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * total value is sum(features[i] * weights[i]).
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
       */
      public Builder removeFeatures(int index) {
        if (featuresBuilder_ == null) {
          ensureFeaturesIsMutable();
          features_.remove(index);
          onChanged();
        } else {
          featuresBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * total value is sum(features[i] * weights[i]).
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder getFeaturesBuilder(
          int index) {
        return getFeaturesFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * total value is sum(features[i] * weights[i]).
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder getFeaturesOrBuilder(
          int index) {
        if (featuresBuilder_ == null) {
          return features_.get(index);  } else {
          return featuresBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * total value is sum(features[i] * weights[i]).
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
       */
      public java.util.List<? extends tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder> 
           getFeaturesOrBuilderList() {
        if (featuresBuilder_ != null) {
          return featuresBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(features_);
        }
      }
      /**
       * <pre>
       * total value is sum(features[i] * weights[i]).
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder addFeaturesBuilder() {
        return getFeaturesFieldBuilder().addBuilder(
            tensorflow.decision_trees.GenericTreeModel.FeatureId.getDefaultInstance());
      }
      /**
       * <pre>
       * total value is sum(features[i] * weights[i]).
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder addFeaturesBuilder(
          int index) {
        return getFeaturesFieldBuilder().addBuilder(
            index, tensorflow.decision_trees.GenericTreeModel.FeatureId.getDefaultInstance());
      }
      /**
       * <pre>
       * total value is sum(features[i] * weights[i]).
       * </pre>
       *
       * <code>repeated .tensorflow.decision_trees.FeatureId features = 1;</code>
       */
      public java.util.List<tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder> 
           getFeaturesBuilderList() {
        return getFeaturesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.FeatureId, tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder, tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder> 
          getFeaturesFieldBuilder() {
        if (featuresBuilder_ == null) {
          featuresBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              tensorflow.decision_trees.GenericTreeModel.FeatureId, tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder, tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder>(
                  features_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          features_ = null;
        }
        return featuresBuilder_;
      }

      private java.util.List<java.lang.Float> weights_ = java.util.Collections.emptyList();
      private void ensureWeightsIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          weights_ = new java.util.ArrayList<java.lang.Float>(weights_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <code>repeated float weights = 2;</code>
       */
      public java.util.List<java.lang.Float>
          getWeightsList() {
        return java.util.Collections.unmodifiableList(weights_);
      }
      /**
       * <code>repeated float weights = 2;</code>
       */
      public int getWeightsCount() {
        return weights_.size();
      }
      /**
       * <code>repeated float weights = 2;</code>
       */
      public float getWeights(int index) {
        return weights_.get(index);
      }
      /**
       * <code>repeated float weights = 2;</code>
       */
      public Builder setWeights(
          int index, float value) {
        ensureWeightsIsMutable();
        weights_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated float weights = 2;</code>
       */
      public Builder addWeights(float value) {
        ensureWeightsIsMutable();
        weights_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated float weights = 2;</code>
       */
      public Builder addAllWeights(
          java.lang.Iterable<? extends java.lang.Float> values) {
        ensureWeightsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, weights_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated float weights = 2;</code>
       */
      public Builder clearWeights() {
        weights_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.decision_trees.ObliqueFeatures)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.decision_trees.ObliqueFeatures)
    private static final tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures();
    }

    public static tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface InequalityTestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.decision_trees.InequalityTest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.tensorflow.decision_trees.FeatureId feature_id = 1;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.FeatureId getFeatureId();
    /**
     * <code>.tensorflow.decision_trees.FeatureId feature_id = 1;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder getFeatureIdOrBuilder();

    /**
     * <code>.tensorflow.decision_trees.ObliqueFeatures oblique = 4;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures getOblique();
    /**
     * <code>.tensorflow.decision_trees.ObliqueFeatures oblique = 4;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.ObliqueFeaturesOrBuilder getObliqueOrBuilder();

    /**
     * <code>.tensorflow.decision_trees.InequalityTest.Type type = 2;</code>
     */
    int getTypeValue();
    /**
     * <code>.tensorflow.decision_trees.InequalityTest.Type type = 2;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.InequalityTest.Type getType();

    /**
     * <code>.tensorflow.decision_trees.Value threshold = 3;</code>
     */
    boolean hasThreshold();
    /**
     * <code>.tensorflow.decision_trees.Value threshold = 3;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.Value getThreshold();
    /**
     * <code>.tensorflow.decision_trees.Value threshold = 3;</code>
     */
    tensorflow.decision_trees.GenericTreeModel.ValueOrBuilder getThresholdOrBuilder();

    public tensorflow.decision_trees.GenericTreeModel.InequalityTest.FeatureSumCase getFeatureSumCase();
  }
  /**
   * Protobuf type {@code tensorflow.decision_trees.InequalityTest}
   */
  public  static final class InequalityTest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.decision_trees.InequalityTest)
      InequalityTestOrBuilder {
    // Use InequalityTest.newBuilder() to construct.
    private InequalityTest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private InequalityTest() {
      type_ = 0;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private InequalityTest(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder subBuilder = null;
              if (featureSumCase_ == 1) {
                subBuilder = ((tensorflow.decision_trees.GenericTreeModel.FeatureId) featureSum_).toBuilder();
              }
              featureSum_ =
                  input.readMessage(tensorflow.decision_trees.GenericTreeModel.FeatureId.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((tensorflow.decision_trees.GenericTreeModel.FeatureId) featureSum_);
                featureSum_ = subBuilder.buildPartial();
              }
              featureSumCase_ = 1;
              break;
            }
            case 16: {
              int rawValue = input.readEnum();

              type_ = rawValue;
              break;
            }
            case 26: {
              tensorflow.decision_trees.GenericTreeModel.Value.Builder subBuilder = null;
              if (threshold_ != null) {
                subBuilder = threshold_.toBuilder();
              }
              threshold_ = input.readMessage(tensorflow.decision_trees.GenericTreeModel.Value.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(threshold_);
                threshold_ = subBuilder.buildPartial();
              }

              break;
            }
            case 34: {
              tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.Builder subBuilder = null;
              if (featureSumCase_ == 4) {
                subBuilder = ((tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures) featureSum_).toBuilder();
              }
              featureSum_ =
                  input.readMessage(tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures) featureSum_);
                featureSum_ = subBuilder.buildPartial();
              }
              featureSumCase_ = 4;
              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_InequalityTest_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_InequalityTest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.decision_trees.GenericTreeModel.InequalityTest.class, tensorflow.decision_trees.GenericTreeModel.InequalityTest.Builder.class);
    }

    /**
     * Protobuf enum {@code tensorflow.decision_trees.InequalityTest.Type}
     */
    public enum Type
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>LESS_OR_EQUAL = 0;</code>
       */
      LESS_OR_EQUAL(0),
      /**
       * <code>LESS_THAN = 1;</code>
       */
      LESS_THAN(1),
      /**
       * <code>GREATER_OR_EQUAL = 2;</code>
       */
      GREATER_OR_EQUAL(2),
      /**
       * <code>GREATER_THAN = 3;</code>
       */
      GREATER_THAN(3),
      UNRECOGNIZED(-1),
      ;

      /**
       * <code>LESS_OR_EQUAL = 0;</code>
       */
      public static final int LESS_OR_EQUAL_VALUE = 0;
      /**
       * <code>LESS_THAN = 1;</code>
       */
      public static final int LESS_THAN_VALUE = 1;
      /**
       * <code>GREATER_OR_EQUAL = 2;</code>
       */
      public static final int GREATER_OR_EQUAL_VALUE = 2;
      /**
       * <code>GREATER_THAN = 3;</code>
       */
      public static final int GREATER_THAN_VALUE = 3;


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

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

      public static Type forNumber(int value) {
        switch (value) {
          case 0: return LESS_OR_EQUAL;
          case 1: return LESS_THAN;
          case 2: return GREATER_OR_EQUAL;
          case 3: return GREATER_THAN;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return tensorflow.decision_trees.GenericTreeModel.InequalityTest.getDescriptor().getEnumTypes().get(0);
      }

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

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

      private final int value;

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

      // @@protoc_insertion_point(enum_scope:tensorflow.decision_trees.InequalityTest.Type)
    }

    private int featureSumCase_ = 0;
    private java.lang.Object featureSum_;
    public enum FeatureSumCase
        implements com.google.protobuf.Internal.EnumLite {
      FEATURE_ID(1),
      OBLIQUE(4),
      FEATURESUM_NOT_SET(0);
      private final int value;
      private FeatureSumCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static FeatureSumCase valueOf(int value) {
        return forNumber(value);
      }

      public static FeatureSumCase forNumber(int value) {
        switch (value) {
          case 1: return FEATURE_ID;
          case 4: return OBLIQUE;
          case 0: return FEATURESUM_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public FeatureSumCase
    getFeatureSumCase() {
      return FeatureSumCase.forNumber(
          featureSumCase_);
    }

    public static final int FEATURE_ID_FIELD_NUMBER = 1;
    /**
     * <code>.tensorflow.decision_trees.FeatureId feature_id = 1;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.FeatureId getFeatureId() {
      if (featureSumCase_ == 1) {
         return (tensorflow.decision_trees.GenericTreeModel.FeatureId) featureSum_;
      }
      return tensorflow.decision_trees.GenericTreeModel.FeatureId.getDefaultInstance();
    }
    /**
     * <code>.tensorflow.decision_trees.FeatureId feature_id = 1;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder getFeatureIdOrBuilder() {
      if (featureSumCase_ == 1) {
         return (tensorflow.decision_trees.GenericTreeModel.FeatureId) featureSum_;
      }
      return tensorflow.decision_trees.GenericTreeModel.FeatureId.getDefaultInstance();
    }

    public static final int OBLIQUE_FIELD_NUMBER = 4;
    /**
     * <code>.tensorflow.decision_trees.ObliqueFeatures oblique = 4;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures getOblique() {
      if (featureSumCase_ == 4) {
         return (tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures) featureSum_;
      }
      return tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.getDefaultInstance();
    }
    /**
     * <code>.tensorflow.decision_trees.ObliqueFeatures oblique = 4;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.ObliqueFeaturesOrBuilder getObliqueOrBuilder() {
      if (featureSumCase_ == 4) {
         return (tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures) featureSum_;
      }
      return tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.getDefaultInstance();
    }

    public static final int TYPE_FIELD_NUMBER = 2;
    private int type_;
    /**
     * <code>.tensorflow.decision_trees.InequalityTest.Type type = 2;</code>
     */
    public int getTypeValue() {
      return type_;
    }
    /**
     * <code>.tensorflow.decision_trees.InequalityTest.Type type = 2;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.InequalityTest.Type getType() {
      tensorflow.decision_trees.GenericTreeModel.InequalityTest.Type result = tensorflow.decision_trees.GenericTreeModel.InequalityTest.Type.valueOf(type_);
      return result == null ? tensorflow.decision_trees.GenericTreeModel.InequalityTest.Type.UNRECOGNIZED : result;
    }

    public static final int THRESHOLD_FIELD_NUMBER = 3;
    private tensorflow.decision_trees.GenericTreeModel.Value threshold_;
    /**
     * <code>.tensorflow.decision_trees.Value threshold = 3;</code>
     */
    public boolean hasThreshold() {
      return threshold_ != null;
    }
    /**
     * <code>.tensorflow.decision_trees.Value threshold = 3;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.Value getThreshold() {
      return threshold_ == null ? tensorflow.decision_trees.GenericTreeModel.Value.getDefaultInstance() : threshold_;
    }
    /**
     * <code>.tensorflow.decision_trees.Value threshold = 3;</code>
     */
    public tensorflow.decision_trees.GenericTreeModel.ValueOrBuilder getThresholdOrBuilder() {
      return getThreshold();
    }

    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 (featureSumCase_ == 1) {
        output.writeMessage(1, (tensorflow.decision_trees.GenericTreeModel.FeatureId) featureSum_);
      }
      if (type_ != tensorflow.decision_trees.GenericTreeModel.InequalityTest.Type.LESS_OR_EQUAL.getNumber()) {
        output.writeEnum(2, type_);
      }
      if (threshold_ != null) {
        output.writeMessage(3, getThreshold());
      }
      if (featureSumCase_ == 4) {
        output.writeMessage(4, (tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures) featureSum_);
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (featureSumCase_ == 1) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, (tensorflow.decision_trees.GenericTreeModel.FeatureId) featureSum_);
      }
      if (type_ != tensorflow.decision_trees.GenericTreeModel.InequalityTest.Type.LESS_OR_EQUAL.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, type_);
      }
      if (threshold_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getThreshold());
      }
      if (featureSumCase_ == 4) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, (tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures) featureSum_);
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.decision_trees.GenericTreeModel.InequalityTest)) {
        return super.equals(obj);
      }
      tensorflow.decision_trees.GenericTreeModel.InequalityTest other = (tensorflow.decision_trees.GenericTreeModel.InequalityTest) obj;

      boolean result = true;
      result = result && type_ == other.type_;
      result = result && (hasThreshold() == other.hasThreshold());
      if (hasThreshold()) {
        result = result && getThreshold()
            .equals(other.getThreshold());
      }
      result = result && getFeatureSumCase().equals(
          other.getFeatureSumCase());
      if (!result) return false;
      switch (featureSumCase_) {
        case 1:
          result = result && getFeatureId()
              .equals(other.getFeatureId());
          break;
        case 4:
          result = result && getOblique()
              .equals(other.getOblique());
          break;
        case 0:
        default:
      }
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + TYPE_FIELD_NUMBER;
      hash = (53 * hash) + type_;
      if (hasThreshold()) {
        hash = (37 * hash) + THRESHOLD_FIELD_NUMBER;
        hash = (53 * hash) + getThreshold().hashCode();
      }
      switch (featureSumCase_) {
        case 1:
          hash = (37 * hash) + FEATURE_ID_FIELD_NUMBER;
          hash = (53 * hash) + getFeatureId().hashCode();
          break;
        case 4:
          hash = (37 * hash) + OBLIQUE_FIELD_NUMBER;
          hash = (53 * hash) + getOblique().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.decision_trees.GenericTreeModel.InequalityTest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.InequalityTest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.InequalityTest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.InequalityTest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.InequalityTest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.InequalityTest 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 tensorflow.decision_trees.GenericTreeModel.InequalityTest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.InequalityTest 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 tensorflow.decision_trees.GenericTreeModel.InequalityTest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.InequalityTest 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(tensorflow.decision_trees.GenericTreeModel.InequalityTest 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;
    }
    /**
     * Protobuf type {@code tensorflow.decision_trees.InequalityTest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.decision_trees.InequalityTest)
        tensorflow.decision_trees.GenericTreeModel.InequalityTestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_InequalityTest_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_InequalityTest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.decision_trees.GenericTreeModel.InequalityTest.class, tensorflow.decision_trees.GenericTreeModel.InequalityTest.Builder.class);
      }

      // Construct using tensorflow.decision_trees.GenericTreeModel.InequalityTest.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();
        type_ = 0;

        if (thresholdBuilder_ == null) {
          threshold_ = null;
        } else {
          threshold_ = null;
          thresholdBuilder_ = null;
        }
        featureSumCase_ = 0;
        featureSum_ = null;
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_InequalityTest_descriptor;
      }

      public tensorflow.decision_trees.GenericTreeModel.InequalityTest getDefaultInstanceForType() {
        return tensorflow.decision_trees.GenericTreeModel.InequalityTest.getDefaultInstance();
      }

      public tensorflow.decision_trees.GenericTreeModel.InequalityTest build() {
        tensorflow.decision_trees.GenericTreeModel.InequalityTest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.decision_trees.GenericTreeModel.InequalityTest buildPartial() {
        tensorflow.decision_trees.GenericTreeModel.InequalityTest result = new tensorflow.decision_trees.GenericTreeModel.InequalityTest(this);
        if (featureSumCase_ == 1) {
          if (featureIdBuilder_ == null) {
            result.featureSum_ = featureSum_;
          } else {
            result.featureSum_ = featureIdBuilder_.build();
          }
        }
        if (featureSumCase_ == 4) {
          if (obliqueBuilder_ == null) {
            result.featureSum_ = featureSum_;
          } else {
            result.featureSum_ = obliqueBuilder_.build();
          }
        }
        result.type_ = type_;
        if (thresholdBuilder_ == null) {
          result.threshold_ = threshold_;
        } else {
          result.threshold_ = thresholdBuilder_.build();
        }
        result.featureSumCase_ = featureSumCase_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          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, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.decision_trees.GenericTreeModel.InequalityTest) {
          return mergeFrom((tensorflow.decision_trees.GenericTreeModel.InequalityTest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.decision_trees.GenericTreeModel.InequalityTest other) {
        if (other == tensorflow.decision_trees.GenericTreeModel.InequalityTest.getDefaultInstance()) return this;
        if (other.type_ != 0) {
          setTypeValue(other.getTypeValue());
        }
        if (other.hasThreshold()) {
          mergeThreshold(other.getThreshold());
        }
        switch (other.getFeatureSumCase()) {
          case FEATURE_ID: {
            mergeFeatureId(other.getFeatureId());
            break;
          }
          case OBLIQUE: {
            mergeOblique(other.getOblique());
            break;
          }
          case FEATURESUM_NOT_SET: {
            break;
          }
        }
        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 {
        tensorflow.decision_trees.GenericTreeModel.InequalityTest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.decision_trees.GenericTreeModel.InequalityTest) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int featureSumCase_ = 0;
      private java.lang.Object featureSum_;
      public FeatureSumCase
          getFeatureSumCase() {
        return FeatureSumCase.forNumber(
            featureSumCase_);
      }

      public Builder clearFeatureSum() {
        featureSumCase_ = 0;
        featureSum_ = null;
        onChanged();
        return this;
      }


      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.FeatureId, tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder, tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder> featureIdBuilder_;
      /**
       * <code>.tensorflow.decision_trees.FeatureId feature_id = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.FeatureId getFeatureId() {
        if (featureIdBuilder_ == null) {
          if (featureSumCase_ == 1) {
            return (tensorflow.decision_trees.GenericTreeModel.FeatureId) featureSum_;
          }
          return tensorflow.decision_trees.GenericTreeModel.FeatureId.getDefaultInstance();
        } else {
          if (featureSumCase_ == 1) {
            return featureIdBuilder_.getMessage();
          }
          return tensorflow.decision_trees.GenericTreeModel.FeatureId.getDefaultInstance();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.FeatureId feature_id = 1;</code>
       */
      public Builder setFeatureId(tensorflow.decision_trees.GenericTreeModel.FeatureId value) {
        if (featureIdBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          featureSum_ = value;
          onChanged();
        } else {
          featureIdBuilder_.setMessage(value);
        }
        featureSumCase_ = 1;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.FeatureId feature_id = 1;</code>
       */
      public Builder setFeatureId(
          tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder builderForValue) {
        if (featureIdBuilder_ == null) {
          featureSum_ = builderForValue.build();
          onChanged();
        } else {
          featureIdBuilder_.setMessage(builderForValue.build());
        }
        featureSumCase_ = 1;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.FeatureId feature_id = 1;</code>
       */
      public Builder mergeFeatureId(tensorflow.decision_trees.GenericTreeModel.FeatureId value) {
        if (featureIdBuilder_ == null) {
          if (featureSumCase_ == 1 &&
              featureSum_ != tensorflow.decision_trees.GenericTreeModel.FeatureId.getDefaultInstance()) {
            featureSum_ = tensorflow.decision_trees.GenericTreeModel.FeatureId.newBuilder((tensorflow.decision_trees.GenericTreeModel.FeatureId) featureSum_)
                .mergeFrom(value).buildPartial();
          } else {
            featureSum_ = value;
          }
          onChanged();
        } else {
          if (featureSumCase_ == 1) {
            featureIdBuilder_.mergeFrom(value);
          }
          featureIdBuilder_.setMessage(value);
        }
        featureSumCase_ = 1;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.FeatureId feature_id = 1;</code>
       */
      public Builder clearFeatureId() {
        if (featureIdBuilder_ == null) {
          if (featureSumCase_ == 1) {
            featureSumCase_ = 0;
            featureSum_ = null;
            onChanged();
          }
        } else {
          if (featureSumCase_ == 1) {
            featureSumCase_ = 0;
            featureSum_ = null;
          }
          featureIdBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.FeatureId feature_id = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder getFeatureIdBuilder() {
        return getFeatureIdFieldBuilder().getBuilder();
      }
      /**
       * <code>.tensorflow.decision_trees.FeatureId feature_id = 1;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder getFeatureIdOrBuilder() {
        if ((featureSumCase_ == 1) && (featureIdBuilder_ != null)) {
          return featureIdBuilder_.getMessageOrBuilder();
        } else {
          if (featureSumCase_ == 1) {
            return (tensorflow.decision_trees.GenericTreeModel.FeatureId) featureSum_;
          }
          return tensorflow.decision_trees.GenericTreeModel.FeatureId.getDefaultInstance();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.FeatureId feature_id = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.FeatureId, tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder, tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder> 
          getFeatureIdFieldBuilder() {
        if (featureIdBuilder_ == null) {
          if (!(featureSumCase_ == 1)) {
            featureSum_ = tensorflow.decision_trees.GenericTreeModel.FeatureId.getDefaultInstance();
          }
          featureIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              tensorflow.decision_trees.GenericTreeModel.FeatureId, tensorflow.decision_trees.GenericTreeModel.FeatureId.Builder, tensorflow.decision_trees.GenericTreeModel.FeatureIdOrBuilder>(
                  (tensorflow.decision_trees.GenericTreeModel.FeatureId) featureSum_,
                  getParentForChildren(),
                  isClean());
          featureSum_ = null;
        }
        featureSumCase_ = 1;
        onChanged();;
        return featureIdBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures, tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.Builder, tensorflow.decision_trees.GenericTreeModel.ObliqueFeaturesOrBuilder> obliqueBuilder_;
      /**
       * <code>.tensorflow.decision_trees.ObliqueFeatures oblique = 4;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures getOblique() {
        if (obliqueBuilder_ == null) {
          if (featureSumCase_ == 4) {
            return (tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures) featureSum_;
          }
          return tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.getDefaultInstance();
        } else {
          if (featureSumCase_ == 4) {
            return obliqueBuilder_.getMessage();
          }
          return tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.getDefaultInstance();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.ObliqueFeatures oblique = 4;</code>
       */
      public Builder setOblique(tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures value) {
        if (obliqueBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          featureSum_ = value;
          onChanged();
        } else {
          obliqueBuilder_.setMessage(value);
        }
        featureSumCase_ = 4;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.ObliqueFeatures oblique = 4;</code>
       */
      public Builder setOblique(
          tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.Builder builderForValue) {
        if (obliqueBuilder_ == null) {
          featureSum_ = builderForValue.build();
          onChanged();
        } else {
          obliqueBuilder_.setMessage(builderForValue.build());
        }
        featureSumCase_ = 4;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.ObliqueFeatures oblique = 4;</code>
       */
      public Builder mergeOblique(tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures value) {
        if (obliqueBuilder_ == null) {
          if (featureSumCase_ == 4 &&
              featureSum_ != tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.getDefaultInstance()) {
            featureSum_ = tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.newBuilder((tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures) featureSum_)
                .mergeFrom(value).buildPartial();
          } else {
            featureSum_ = value;
          }
          onChanged();
        } else {
          if (featureSumCase_ == 4) {
            obliqueBuilder_.mergeFrom(value);
          }
          obliqueBuilder_.setMessage(value);
        }
        featureSumCase_ = 4;
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.ObliqueFeatures oblique = 4;</code>
       */
      public Builder clearOblique() {
        if (obliqueBuilder_ == null) {
          if (featureSumCase_ == 4) {
            featureSumCase_ = 0;
            featureSum_ = null;
            onChanged();
          }
        } else {
          if (featureSumCase_ == 4) {
            featureSumCase_ = 0;
            featureSum_ = null;
          }
          obliqueBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.ObliqueFeatures oblique = 4;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.Builder getObliqueBuilder() {
        return getObliqueFieldBuilder().getBuilder();
      }
      /**
       * <code>.tensorflow.decision_trees.ObliqueFeatures oblique = 4;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.ObliqueFeaturesOrBuilder getObliqueOrBuilder() {
        if ((featureSumCase_ == 4) && (obliqueBuilder_ != null)) {
          return obliqueBuilder_.getMessageOrBuilder();
        } else {
          if (featureSumCase_ == 4) {
            return (tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures) featureSum_;
          }
          return tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.getDefaultInstance();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.ObliqueFeatures oblique = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures, tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.Builder, tensorflow.decision_trees.GenericTreeModel.ObliqueFeaturesOrBuilder> 
          getObliqueFieldBuilder() {
        if (obliqueBuilder_ == null) {
          if (!(featureSumCase_ == 4)) {
            featureSum_ = tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.getDefaultInstance();
          }
          obliqueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures, tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures.Builder, tensorflow.decision_trees.GenericTreeModel.ObliqueFeaturesOrBuilder>(
                  (tensorflow.decision_trees.GenericTreeModel.ObliqueFeatures) featureSum_,
                  getParentForChildren(),
                  isClean());
          featureSum_ = null;
        }
        featureSumCase_ = 4;
        onChanged();;
        return obliqueBuilder_;
      }

      private int type_ = 0;
      /**
       * <code>.tensorflow.decision_trees.InequalityTest.Type type = 2;</code>
       */
      public int getTypeValue() {
        return type_;
      }
      /**
       * <code>.tensorflow.decision_trees.InequalityTest.Type type = 2;</code>
       */
      public Builder setTypeValue(int value) {
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.InequalityTest.Type type = 2;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.InequalityTest.Type getType() {
        tensorflow.decision_trees.GenericTreeModel.InequalityTest.Type result = tensorflow.decision_trees.GenericTreeModel.InequalityTest.Type.valueOf(type_);
        return result == null ? tensorflow.decision_trees.GenericTreeModel.InequalityTest.Type.UNRECOGNIZED : result;
      }
      /**
       * <code>.tensorflow.decision_trees.InequalityTest.Type type = 2;</code>
       */
      public Builder setType(tensorflow.decision_trees.GenericTreeModel.InequalityTest.Type value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        type_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.InequalityTest.Type type = 2;</code>
       */
      public Builder clearType() {
        
        type_ = 0;
        onChanged();
        return this;
      }

      private tensorflow.decision_trees.GenericTreeModel.Value threshold_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.Value, tensorflow.decision_trees.GenericTreeModel.Value.Builder, tensorflow.decision_trees.GenericTreeModel.ValueOrBuilder> thresholdBuilder_;
      /**
       * <code>.tensorflow.decision_trees.Value threshold = 3;</code>
       */
      public boolean hasThreshold() {
        return thresholdBuilder_ != null || threshold_ != null;
      }
      /**
       * <code>.tensorflow.decision_trees.Value threshold = 3;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Value getThreshold() {
        if (thresholdBuilder_ == null) {
          return threshold_ == null ? tensorflow.decision_trees.GenericTreeModel.Value.getDefaultInstance() : threshold_;
        } else {
          return thresholdBuilder_.getMessage();
        }
      }
      /**
       * <code>.tensorflow.decision_trees.Value threshold = 3;</code>
       */
      public Builder setThreshold(tensorflow.decision_trees.GenericTreeModel.Value value) {
        if (thresholdBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          threshold_ = value;
          onChanged();
        } else {
          thresholdBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Value threshold = 3;</code>
       */
      public Builder setThreshold(
          tensorflow.decision_trees.GenericTreeModel.Value.Builder builderForValue) {
        if (thresholdBuilder_ == null) {
          threshold_ = builderForValue.build();
          onChanged();
        } else {
          thresholdBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Value threshold = 3;</code>
       */
      public Builder mergeThreshold(tensorflow.decision_trees.GenericTreeModel.Value value) {
        if (thresholdBuilder_ == null) {
          if (threshold_ != null) {
            threshold_ =
              tensorflow.decision_trees.GenericTreeModel.Value.newBuilder(threshold_).mergeFrom(value).buildPartial();
          } else {
            threshold_ = value;
          }
          onChanged();
        } else {
          thresholdBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Value threshold = 3;</code>
       */
      public Builder clearThreshold() {
        if (thresholdBuilder_ == null) {
          threshold_ = null;
          onChanged();
        } else {
          threshold_ = null;
          thresholdBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.tensorflow.decision_trees.Value threshold = 3;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.Value.Builder getThresholdBuilder() {
        
        onChanged();
        return getThresholdFieldBuilder().getBuilder();
      }
      /**
       * <code>.tensorflow.decision_trees.Value threshold = 3;</code>
       */
      public tensorflow.decision_trees.GenericTreeModel.ValueOrBuilder getThresholdOrBuilder() {
        if (thresholdBuilder_ != null) {
          return thresholdBuilder_.getMessageOrBuilder();
        } else {
          return threshold_ == null ?
              tensorflow.decision_trees.GenericTreeModel.Value.getDefaultInstance() : threshold_;
        }
      }
      /**
       * <code>.tensorflow.decision_trees.Value threshold = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.decision_trees.GenericTreeModel.Value, tensorflow.decision_trees.GenericTreeModel.Value.Builder, tensorflow.decision_trees.GenericTreeModel.ValueOrBuilder> 
          getThresholdFieldBuilder() {
        if (thresholdBuilder_ == null) {
          thresholdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              tensorflow.decision_trees.GenericTreeModel.Value, tensorflow.decision_trees.GenericTreeModel.Value.Builder, tensorflow.decision_trees.GenericTreeModel.ValueOrBuilder>(
                  getThreshold(),
                  getParentForChildren(),
                  isClean());
          threshold_ = null;
        }
        return thresholdBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.decision_trees.InequalityTest)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.decision_trees.InequalityTest)
    private static final tensorflow.decision_trees.GenericTreeModel.InequalityTest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.decision_trees.GenericTreeModel.InequalityTest();
    }

    public static tensorflow.decision_trees.GenericTreeModel.InequalityTest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public tensorflow.decision_trees.GenericTreeModel.InequalityTest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ValueOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.decision_trees.Value)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>float float_value = 1;</code>
     */
    float getFloatValue();

    /**
     * <code>double double_value = 2;</code>
     */
    double getDoubleValue();

    /**
     * <code>int32 int32_value = 3;</code>
     */
    int getInt32Value();

    /**
     * <code>int64 int64_value = 4;</code>
     */
    long getInt64Value();

    /**
     * <code>.google.protobuf.Any custom_value = 5;</code>
     */
    com.google.protobuf.Any getCustomValue();
    /**
     * <code>.google.protobuf.Any custom_value = 5;</code>
     */
    com.google.protobuf.AnyOrBuilder getCustomValueOrBuilder();

    public tensorflow.decision_trees.GenericTreeModel.Value.ValueCase getValueCase();
  }
  /**
   * <pre>
   * Represents a single value of any type, e.g. 5 or "abc".
   * </pre>
   *
   * Protobuf type {@code tensorflow.decision_trees.Value}
   */
  public  static final class Value extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.decision_trees.Value)
      ValueOrBuilder {
    // Use Value.newBuilder() to construct.
    private Value(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Value() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private Value(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 13: {
              valueCase_ = 1;
              value_ = input.readFloat();
              break;
            }
            case 17: {
              valueCase_ = 2;
              value_ = input.readDouble();
              break;
            }
            case 24: {
              valueCase_ = 3;
              value_ = input.readInt32();
              break;
            }
            case 32: {
              valueCase_ = 4;
              value_ = input.readInt64();
              break;
            }
            case 42: {
              com.google.protobuf.Any.Builder subBuilder = null;
              if (valueCase_ == 5) {
                subBuilder = ((com.google.protobuf.Any) value_).toBuilder();
              }
              value_ =
                  input.readMessage(com.google.protobuf.Any.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((com.google.protobuf.Any) value_);
                value_ = subBuilder.buildPartial();
              }
              valueCase_ = 5;
              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Value_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Value_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.decision_trees.GenericTreeModel.Value.class, tensorflow.decision_trees.GenericTreeModel.Value.Builder.class);
    }

    private int valueCase_ = 0;
    private java.lang.Object value_;
    public enum ValueCase
        implements com.google.protobuf.Internal.EnumLite {
      FLOAT_VALUE(1),
      DOUBLE_VALUE(2),
      INT32_VALUE(3),
      INT64_VALUE(4),
      CUSTOM_VALUE(5),
      VALUE_NOT_SET(0);
      private final int value;
      private ValueCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static ValueCase valueOf(int value) {
        return forNumber(value);
      }

      public static ValueCase forNumber(int value) {
        switch (value) {
          case 1: return FLOAT_VALUE;
          case 2: return DOUBLE_VALUE;
          case 3: return INT32_VALUE;
          case 4: return INT64_VALUE;
          case 5: return CUSTOM_VALUE;
          case 0: return VALUE_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public ValueCase
    getValueCase() {
      return ValueCase.forNumber(
          valueCase_);
    }

    public static final int FLOAT_VALUE_FIELD_NUMBER = 1;
    /**
     * <code>float float_value = 1;</code>
     */
    public float getFloatValue() {
      if (valueCase_ == 1) {
        return (java.lang.Float) value_;
      }
      return 0F;
    }

    public static final int DOUBLE_VALUE_FIELD_NUMBER = 2;
    /**
     * <code>double double_value = 2;</code>
     */
    public double getDoubleValue() {
      if (valueCase_ == 2) {
        return (java.lang.Double) value_;
      }
      return 0D;
    }

    public static final int INT32_VALUE_FIELD_NUMBER = 3;
    /**
     * <code>int32 int32_value = 3;</code>
     */
    public int getInt32Value() {
      if (valueCase_ == 3) {
        return (java.lang.Integer) value_;
      }
      return 0;
    }

    public static final int INT64_VALUE_FIELD_NUMBER = 4;
    /**
     * <code>int64 int64_value = 4;</code>
     */
    public long getInt64Value() {
      if (valueCase_ == 4) {
        return (java.lang.Long) value_;
      }
      return 0L;
    }

    public static final int CUSTOM_VALUE_FIELD_NUMBER = 5;
    /**
     * <code>.google.protobuf.Any custom_value = 5;</code>
     */
    public com.google.protobuf.Any getCustomValue() {
      if (valueCase_ == 5) {
         return (com.google.protobuf.Any) value_;
      }
      return com.google.protobuf.Any.getDefaultInstance();
    }
    /**
     * <code>.google.protobuf.Any custom_value = 5;</code>
     */
    public com.google.protobuf.AnyOrBuilder getCustomValueOrBuilder() {
      if (valueCase_ == 5) {
         return (com.google.protobuf.Any) value_;
      }
      return com.google.protobuf.Any.getDefaultInstance();
    }

    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 (valueCase_ == 1) {
        output.writeFloat(
            1, (float)((java.lang.Float) value_));
      }
      if (valueCase_ == 2) {
        output.writeDouble(
            2, (double)((java.lang.Double) value_));
      }
      if (valueCase_ == 3) {
        output.writeInt32(
            3, (int)((java.lang.Integer) value_));
      }
      if (valueCase_ == 4) {
        output.writeInt64(
            4, (long)((java.lang.Long) value_));
      }
      if (valueCase_ == 5) {
        output.writeMessage(5, (com.google.protobuf.Any) value_);
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (valueCase_ == 1) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(
              1, (float)((java.lang.Float) value_));
      }
      if (valueCase_ == 2) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(
              2, (double)((java.lang.Double) value_));
      }
      if (valueCase_ == 3) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(
              3, (int)((java.lang.Integer) value_));
      }
      if (valueCase_ == 4) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(
              4, (long)((java.lang.Long) value_));
      }
      if (valueCase_ == 5) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, (com.google.protobuf.Any) value_);
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.decision_trees.GenericTreeModel.Value)) {
        return super.equals(obj);
      }
      tensorflow.decision_trees.GenericTreeModel.Value other = (tensorflow.decision_trees.GenericTreeModel.Value) obj;

      boolean result = true;
      result = result && getValueCase().equals(
          other.getValueCase());
      if (!result) return false;
      switch (valueCase_) {
        case 1:
          result = result && (
              java.lang.Float.floatToIntBits(getFloatValue())
              == java.lang.Float.floatToIntBits(
                  other.getFloatValue()));
          break;
        case 2:
          result = result && (
              java.lang.Double.doubleToLongBits(getDoubleValue())
              == java.lang.Double.doubleToLongBits(
                  other.getDoubleValue()));
          break;
        case 3:
          result = result && (getInt32Value()
              == other.getInt32Value());
          break;
        case 4:
          result = result && (getInt64Value()
              == other.getInt64Value());
          break;
        case 5:
          result = result && getCustomValue()
              .equals(other.getCustomValue());
          break;
        case 0:
        default:
      }
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      switch (valueCase_) {
        case 1:
          hash = (37 * hash) + FLOAT_VALUE_FIELD_NUMBER;
          hash = (53 * hash) + java.lang.Float.floatToIntBits(
              getFloatValue());
          break;
        case 2:
          hash = (37 * hash) + DOUBLE_VALUE_FIELD_NUMBER;
          hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
              java.lang.Double.doubleToLongBits(getDoubleValue()));
          break;
        case 3:
          hash = (37 * hash) + INT32_VALUE_FIELD_NUMBER;
          hash = (53 * hash) + getInt32Value();
          break;
        case 4:
          hash = (37 * hash) + INT64_VALUE_FIELD_NUMBER;
          hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
              getInt64Value());
          break;
        case 5:
          hash = (37 * hash) + CUSTOM_VALUE_FIELD_NUMBER;
          hash = (53 * hash) + getCustomValue().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.decision_trees.GenericTreeModel.Value parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Value parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Value parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Value parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Value parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Value 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 tensorflow.decision_trees.GenericTreeModel.Value parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Value 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 tensorflow.decision_trees.GenericTreeModel.Value parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.decision_trees.GenericTreeModel.Value 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(tensorflow.decision_trees.GenericTreeModel.Value 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>
     * Represents a single value of any type, e.g. 5 or "abc".
     * </pre>
     *
     * Protobuf type {@code tensorflow.decision_trees.Value}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.decision_trees.Value)
        tensorflow.decision_trees.GenericTreeModel.ValueOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Value_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Value_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.decision_trees.GenericTreeModel.Value.class, tensorflow.decision_trees.GenericTreeModel.Value.Builder.class);
      }

      // Construct using tensorflow.decision_trees.GenericTreeModel.Value.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();
        valueCase_ = 0;
        value_ = null;
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.decision_trees.GenericTreeModel.internal_static_tensorflow_decision_trees_Value_descriptor;
      }

      public tensorflow.decision_trees.GenericTreeModel.Value getDefaultInstanceForType() {
        return tensorflow.decision_trees.GenericTreeModel.Value.getDefaultInstance();
      }

      public tensorflow.decision_trees.GenericTreeModel.Value build() {
        tensorflow.decision_trees.GenericTreeModel.Value result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.decision_trees.GenericTreeModel.Value buildPartial() {
        tensorflow.decision_trees.GenericTreeModel.Value result = new tensorflow.decision_trees.GenericTreeModel.Value(this);
        if (valueCase_ == 1) {
          result.value_ = value_;
        }
        if (valueCase_ == 2) {
          result.value_ = value_;
        }
        if (valueCase_ == 3) {
          result.value_ = value_;
        }
        if (valueCase_ == 4) {
          result.value_ = value_;
        }
        if (valueCase_ == 5) {
          if (customValueBuilder_ == null) {
            result.value_ = value_;
          } else {
            result.value_ = customValueBuilder_.build();
          }
        }
        result.valueCase_ = valueCase_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          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, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.decision_trees.GenericTreeModel.Value) {
          return mergeFrom((tensorflow.decision_trees.GenericTreeModel.Value)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.decision_trees.GenericTreeModel.Value other) {
        if (other == tensorflow.decision_trees.GenericTreeModel.Value.getDefaultInstance()) return this;
        switch (other.getValueCase()) {
          case FLOAT_VALUE: {
            setFloatValue(other.getFloatValue());
            break;
          }
          case DOUBLE_VALUE: {
            setDoubleValue(other.getDoubleValue());
            break;
          }
          case INT32_VALUE: {
            setInt32Value(other.getInt32Value());
            break;
          }
          case INT64_VALUE: {
            setInt64Value(other.getInt64Value());
            break;
          }
          case CUSTOM_VALUE: {
            mergeCustomValue(other.getCustomValue());
            break;
          }
          case VALUE_NOT_SET: {
            break;
          }
        }
        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 {
        tensorflow.decision_trees.GenericTreeModel.Value parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.decision_trees.GenericTreeModel.Value) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int valueCase_ = 0;
      private java.lang.Object value_;
      public ValueCase
          getValueCase() {
        return ValueCase.forNumber(
            valueCase_);
      }

      public Builder clearValue() {
        valueCase_ = 0;
        value_ = null;
        onChanged();
        return this;
      }


      /**
       * <code>float float_value = 1;</code>
       */
      public float getFloatValue() {
        if (valueCase_ == 1) {
          return (java.lang.Float) value_;
        }
        return 0F;
      }
      /**
       * <code>float float_value = 1;</code>
       */
      public Builder setFloatValue(float value) {
        valueCase_ = 1;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>float float_value = 1;</code>
       */
      public Builder clearFloatValue() {
        if (valueCase_ == 1) {
          valueCase_ = 0;
          value_ = null;
          onChanged();
        }
        return this;
      }

      /**
       * <code>double double_value = 2;</code>
       */
      public double getDoubleValue() {
        if (valueCase_ == 2) {
          return (java.lang.Double) value_;
        }
        return 0D;
      }
      /**
       * <code>double double_value = 2;</code>
       */
      public Builder setDoubleValue(double value) {
        valueCase_ = 2;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double double_value = 2;</code>
       */
      public Builder clearDoubleValue() {
        if (valueCase_ == 2) {
          valueCase_ = 0;
          value_ = null;
          onChanged();
        }
        return this;
      }

      /**
       * <code>int32 int32_value = 3;</code>
       */
      public int getInt32Value() {
        if (valueCase_ == 3) {
          return (java.lang.Integer) value_;
        }
        return 0;
      }
      /**
       * <code>int32 int32_value = 3;</code>
       */
      public Builder setInt32Value(int value) {
        valueCase_ = 3;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 int32_value = 3;</code>
       */
      public Builder clearInt32Value() {
        if (valueCase_ == 3) {
          valueCase_ = 0;
          value_ = null;
          onChanged();
        }
        return this;
      }

      /**
       * <code>int64 int64_value = 4;</code>
       */
      public long getInt64Value() {
        if (valueCase_ == 4) {
          return (java.lang.Long) value_;
        }
        return 0L;
      }
      /**
       * <code>int64 int64_value = 4;</code>
       */
      public Builder setInt64Value(long value) {
        valueCase_ = 4;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int64 int64_value = 4;</code>
       */
      public Builder clearInt64Value() {
        if (valueCase_ == 4) {
          valueCase_ = 0;
          value_ = null;
          onChanged();
        }
        return this;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> customValueBuilder_;
      /**
       * <code>.google.protobuf.Any custom_value = 5;</code>
       */
      public com.google.protobuf.Any getCustomValue() {
        if (customValueBuilder_ == null) {
          if (valueCase_ == 5) {
            return (com.google.protobuf.Any) value_;
          }
          return com.google.protobuf.Any.getDefaultInstance();
        } else {
          if (valueCase_ == 5) {
            return customValueBuilder_.getMessage();
          }
          return com.google.protobuf.Any.getDefaultInstance();
        }
      }
      /**
       * <code>.google.protobuf.Any custom_value = 5;</code>
       */
      public Builder setCustomValue(com.google.protobuf.Any value) {
        if (customValueBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          value_ = value;
          onChanged();
        } else {
          customValueBuilder_.setMessage(value);
        }
        valueCase_ = 5;
        return this;
      }
      /**
       * <code>.google.protobuf.Any custom_value = 5;</code>
       */
      public Builder setCustomValue(
          com.google.protobuf.Any.Builder builderForValue) {
        if (customValueBuilder_ == null) {
          value_ = builderForValue.build();
          onChanged();
        } else {
          customValueBuilder_.setMessage(builderForValue.build());
        }
        valueCase_ = 5;
        return this;
      }
      /**
       * <code>.google.protobuf.Any custom_value = 5;</code>
       */
      public Builder mergeCustomValue(com.google.protobuf.Any value) {
        if (customValueBuilder_ == null) {
          if (valueCase_ == 5 &&
              value_ != com.google.protobuf.Any.getDefaultInstance()) {
            value_ = com.google.protobuf.Any.newBuilder((com.google.protobuf.Any) value_)
                .mergeFrom(value).buildPartial();
          } else {
            value_ = value;
          }
          onChanged();
        } else {
          if (valueCase_ == 5) {
            customValueBuilder_.mergeFrom(value);
          }
          customValueBuilder_.setMessage(value);
        }
        valueCase_ = 5;
        return this;
      }
      /**
       * <code>.google.protobuf.Any custom_value = 5;</code>
       */
      public Builder clearCustomValue() {
        if (customValueBuilder_ == null) {
          if (valueCase_ == 5) {
            valueCase_ = 0;
            value_ = null;
            onChanged();
          }
        } else {
          if (valueCase_ == 5) {
            valueCase_ = 0;
            value_ = null;
          }
          customValueBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>.google.protobuf.Any custom_value = 5;</code>
       */
      public com.google.protobuf.Any.Builder getCustomValueBuilder() {
        return getCustomValueFieldBuilder().getBuilder();
      }
      /**
       * <code>.google.protobuf.Any custom_value = 5;</code>
       */
      public com.google.protobuf.AnyOrBuilder getCustomValueOrBuilder() {
        if ((valueCase_ == 5) && (customValueBuilder_ != null)) {
          return customValueBuilder_.getMessageOrBuilder();
        } else {
          if (valueCase_ == 5) {
            return (com.google.protobuf.Any) value_;
          }
          return com.google.protobuf.Any.getDefaultInstance();
        }
      }
      /**
       * <code>.google.protobuf.Any custom_value = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> 
          getCustomValueFieldBuilder() {
        if (customValueBuilder_ == null) {
          if (!(valueCase_ == 5)) {
            value_ = com.google.protobuf.Any.getDefaultInstance();
          }
          customValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder>(
                  (com.google.protobuf.Any) value_,
                  getParentForChildren(),
                  isClean());
          value_ = null;
        }
        valueCase_ = 5;
        onChanged();;
        return customValueBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.decision_trees.Value)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.decision_trees.Value)
    private static final tensorflow.decision_trees.GenericTreeModel.Value DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.decision_trees.GenericTreeModel.Value();
    }

    public static tensorflow.decision_trees.GenericTreeModel.Value getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public tensorflow.decision_trees.GenericTreeModel.Value getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_decision_trees_Model_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_decision_trees_Model_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_decision_trees_ModelAndFeatures_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_decision_trees_ModelAndFeatures_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_decision_trees_ModelAndFeatures_Feature_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_decision_trees_ModelAndFeatures_Feature_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_decision_trees_ModelAndFeatures_FeaturesEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_decision_trees_ModelAndFeatures_FeaturesEntry_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_decision_trees_Ensemble_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_decision_trees_Ensemble_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_decision_trees_Ensemble_Member_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_decision_trees_Ensemble_Member_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_decision_trees_Summation_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_decision_trees_Summation_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_decision_trees_Averaging_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_decision_trees_Averaging_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_decision_trees_DecisionTree_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_decision_trees_DecisionTree_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_decision_trees_TreeNode_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_decision_trees_TreeNode_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_decision_trees_BinaryNode_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_decision_trees_BinaryNode_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_decision_trees_SparseVector_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_decision_trees_SparseVector_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_decision_trees_SparseVector_SparseValueEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_decision_trees_SparseVector_SparseValueEntry_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_decision_trees_Vector_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_decision_trees_Vector_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_decision_trees_Leaf_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_decision_trees_Leaf_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_decision_trees_FeatureId_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_decision_trees_FeatureId_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_decision_trees_ObliqueFeatures_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_decision_trees_ObliqueFeatures_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_decision_trees_InequalityTest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_decision_trees_InequalityTest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_decision_trees_Value_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_decision_trees_Value_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@tensorflow/contrib/decision_trees/prot" +
      "o/generic_tree_model.proto\022\031tensorflow.d" +
      "ecision_trees\032\031google/protobuf/any.proto" +
      "\032\036google/protobuf/wrappers.proto\"\350\001\n\005Mod" +
      "el\022@\n\rdecision_tree\030\001 \001(\0132\'.tensorflow.d" +
      "ecision_trees.DecisionTreeH\000\0227\n\010ensemble" +
      "\030\002 \001(\0132#.tensorflow.decision_trees.Ensem" +
      "bleH\000\022,\n\014custom_model\030\003 \001(\0132\024.google.pro" +
      "tobuf.AnyH\000\022-\n\017additional_data\030\004 \003(\0132\024.g" +
      "oogle.protobuf.AnyB\007\n\005model\"\235\003\n\020ModelAnd",
      "Features\022K\n\010features\030\001 \003(\01329.tensorflow." +
      "decision_trees.ModelAndFeatures.Features" +
      "Entry\022/\n\005model\030\002 \001(\0132 .tensorflow.decisi" +
      "on_trees.Model\022-\n\017additional_data\030\003 \003(\0132" +
      "\024.google.protobuf.Any\032v\n\007Feature\022<\n\nfeat" +
      "ure_id\030\001 \001(\0132$.tensorflow.decision_trees" +
      ".FeatureIdB\002\030\001\022-\n\017additional_data\030\002 \003(\0132" +
      "\024.google.protobuf.Any\032d\n\rFeaturesEntry\022\013" +
      "\n\003key\030\001 \001(\t\022B\n\005value\030\002 \001(\01323.tensorflow." +
      "decision_trees.ModelAndFeatures.Feature:",
      "\0028\001\"\217\004\n\010Ensemble\022;\n\007members\030d \003(\0132*.tens" +
      "orflow.decision_trees.Ensemble.Member\022O\n" +
      "\037summation_combination_technique\030\001 \001(\0132$" +
      ".tensorflow.decision_trees.SummationH\000\022O" +
      "\n\037averaging_combination_technique\030\002 \001(\0132" +
      "$.tensorflow.decision_trees.AveragingH\000\022" +
      "<\n\034custom_combination_technique\030\003 \001(\0132\024." +
      "google.protobuf.AnyH\000\022-\n\017additional_data" +
      "\030\004 \003(\0132\024.google.protobuf.Any\032\235\001\n\006Member\022" +
      "2\n\010submodel\030\001 \001(\0132 .tensorflow.decision_",
      "trees.Model\0220\n\013submodel_id\030\002 \001(\0132\033.googl" +
      "e.protobuf.Int32Value\022-\n\017additional_data" +
      "\030\003 \003(\0132\024.google.protobuf.AnyB\027\n\025combinat" +
      "ion_technique\":\n\tSummation\022-\n\017additional" +
      "_data\030\001 \003(\0132\024.google.protobuf.Any\":\n\tAve" +
      "raging\022-\n\017additional_data\030\001 \003(\0132\024.google" +
      ".protobuf.Any\"q\n\014DecisionTree\0222\n\005nodes\030\001" +
      " \003(\0132#.tensorflow.decision_trees.TreeNod" +
      "e\022-\n\017additional_data\030\002 \003(\0132\024.google.prot" +
      "obuf.Any\"\364\002\n\010TreeNode\022,\n\007node_id\030\001 \001(\0132\033",
      ".google.protobuf.Int32Value\022*\n\005depth\030\002 \001" +
      "(\0132\033.google.protobuf.Int32Value\0221\n\014subtr" +
      "ee_size\030\003 \001(\0132\033.google.protobuf.Int32Val" +
      "ue\022<\n\013binary_node\030\004 \001(\0132%.tensorflow.dec" +
      "ision_trees.BinaryNodeH\000\022/\n\004leaf\030\005 \001(\0132\037" +
      ".tensorflow.decision_trees.LeafH\000\0220\n\020cus" +
      "tom_node_type\030\006 \001(\0132\024.google.protobuf.An" +
      "yH\000\022-\n\017additional_data\030\007 \003(\0132\024.google.pr" +
      "otobuf.AnyB\013\n\tnode_type\"\377\002\n\nBinaryNode\0222" +
      "\n\rleft_child_id\030\001 \001(\0132\033.google.protobuf.",
      "Int32Value\0223\n\016right_child_id\030\002 \001(\0132\033.goo" +
      "gle.protobuf.Int32Value\022J\n\021default_direc" +
      "tion\030\003 \001(\0162/.tensorflow.decision_trees.B" +
      "inaryNode.Direction\022O\n\032inequality_left_c" +
      "hild_test\030\004 \001(\0132).tensorflow.decision_tr" +
      "ees.InequalityTestH\000\0226\n\026custom_left_chil" +
      "d_test\030\005 \001(\0132\024.google.protobuf.AnyH\000\" \n\t" +
      "Direction\022\010\n\004LEFT\020\000\022\t\n\005RIGHT\020\001B\021\n\017left_c" +
      "hild_test\"\264\001\n\014SparseVector\022N\n\014sparse_val" +
      "ue\030\001 \003(\01328.tensorflow.decision_trees.Spa",
      "rseVector.SparseValueEntry\032T\n\020SparseValu" +
      "eEntry\022\013\n\003key\030\001 \001(\003\022/\n\005value\030\002 \001(\0132 .ten" +
      "sorflow.decision_trees.Value:\0028\001\"9\n\006Vect" +
      "or\022/\n\005value\030\001 \003(\0132 .tensorflow.decision_" +
      "trees.Value\"\264\001\n\004Leaf\0223\n\006vector\030\001 \001(\0132!.t" +
      "ensorflow.decision_trees.VectorH\000\022@\n\rspa" +
      "rse_vector\030\002 \001(\0132\'.tensorflow.decision_t" +
      "rees.SparseVectorH\000\022-\n\017additional_data\030\003" +
      " \003(\0132\024.google.protobuf.AnyB\006\n\004leaf\"d\n\tFe" +
      "atureId\022(\n\002id\030\001 \001(\0132\034.google.protobuf.St",
      "ringValue\022-\n\017additional_data\030\002 \003(\0132\024.goo" +
      "gle.protobuf.Any\"Z\n\017ObliqueFeatures\0226\n\010f" +
      "eatures\030\001 \003(\0132$.tensorflow.decision_tree" +
      "s.FeatureId\022\017\n\007weights\030\002 \003(\002\"\336\002\n\016Inequal" +
      "ityTest\022:\n\nfeature_id\030\001 \001(\0132$.tensorflow" +
      ".decision_trees.FeatureIdH\000\022=\n\007oblique\030\004" +
      " \001(\0132*.tensorflow.decision_trees.Oblique" +
      "FeaturesH\000\022<\n\004type\030\002 \001(\0162..tensorflow.de" +
      "cision_trees.InequalityTest.Type\0223\n\tthre" +
      "shold\030\003 \001(\0132 .tensorflow.decision_trees.",
      "Value\"P\n\004Type\022\021\n\rLESS_OR_EQUAL\020\000\022\r\n\tLESS" +
      "_THAN\020\001\022\024\n\020GREATER_OR_EQUAL\020\002\022\020\n\014GREATER" +
      "_THAN\020\003B\014\n\nFeatureSum\"\233\001\n\005Value\022\025\n\013float" +
      "_value\030\001 \001(\002H\000\022\026\n\014double_value\030\002 \001(\001H\000\022\025" +
      "\n\013int32_value\030\003 \001(\005H\000\022\025\n\013int64_value\030\004 \001" +
      "(\003H\000\022,\n\014custom_value\030\005 \001(\0132\024.google.prot" +
      "obuf.AnyH\000B\007\n\005valueB\003\370\001\001b\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.google.protobuf.AnyProto.getDescriptor(),
          com.google.protobuf.WrappersProto.getDescriptor(),
        }, assigner);
    internal_static_tensorflow_decision_trees_Model_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_tensorflow_decision_trees_Model_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_decision_trees_Model_descriptor,
        new java.lang.String[] { "DecisionTree", "Ensemble", "CustomModel", "AdditionalData", "Model", });
    internal_static_tensorflow_decision_trees_ModelAndFeatures_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_tensorflow_decision_trees_ModelAndFeatures_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_decision_trees_ModelAndFeatures_descriptor,
        new java.lang.String[] { "Features", "Model", "AdditionalData", });
    internal_static_tensorflow_decision_trees_ModelAndFeatures_Feature_descriptor =
      internal_static_tensorflow_decision_trees_ModelAndFeatures_descriptor.getNestedTypes().get(0);
    internal_static_tensorflow_decision_trees_ModelAndFeatures_Feature_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_decision_trees_ModelAndFeatures_Feature_descriptor,
        new java.lang.String[] { "FeatureId", "AdditionalData", });
    internal_static_tensorflow_decision_trees_ModelAndFeatures_FeaturesEntry_descriptor =
      internal_static_tensorflow_decision_trees_ModelAndFeatures_descriptor.getNestedTypes().get(1);
    internal_static_tensorflow_decision_trees_ModelAndFeatures_FeaturesEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_decision_trees_ModelAndFeatures_FeaturesEntry_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_tensorflow_decision_trees_Ensemble_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_tensorflow_decision_trees_Ensemble_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_decision_trees_Ensemble_descriptor,
        new java.lang.String[] { "Members", "SummationCombinationTechnique", "AveragingCombinationTechnique", "CustomCombinationTechnique", "AdditionalData", "CombinationTechnique", });
    internal_static_tensorflow_decision_trees_Ensemble_Member_descriptor =
      internal_static_tensorflow_decision_trees_Ensemble_descriptor.getNestedTypes().get(0);
    internal_static_tensorflow_decision_trees_Ensemble_Member_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_decision_trees_Ensemble_Member_descriptor,
        new java.lang.String[] { "Submodel", "SubmodelId", "AdditionalData", });
    internal_static_tensorflow_decision_trees_Summation_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_tensorflow_decision_trees_Summation_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_decision_trees_Summation_descriptor,
        new java.lang.String[] { "AdditionalData", });
    internal_static_tensorflow_decision_trees_Averaging_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_tensorflow_decision_trees_Averaging_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_decision_trees_Averaging_descriptor,
        new java.lang.String[] { "AdditionalData", });
    internal_static_tensorflow_decision_trees_DecisionTree_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_tensorflow_decision_trees_DecisionTree_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_decision_trees_DecisionTree_descriptor,
        new java.lang.String[] { "Nodes", "AdditionalData", });
    internal_static_tensorflow_decision_trees_TreeNode_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_tensorflow_decision_trees_TreeNode_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_decision_trees_TreeNode_descriptor,
        new java.lang.String[] { "NodeId", "Depth", "SubtreeSize", "BinaryNode", "Leaf", "CustomNodeType", "AdditionalData", "NodeType", });
    internal_static_tensorflow_decision_trees_BinaryNode_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_tensorflow_decision_trees_BinaryNode_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_decision_trees_BinaryNode_descriptor,
        new java.lang.String[] { "LeftChildId", "RightChildId", "DefaultDirection", "InequalityLeftChildTest", "CustomLeftChildTest", "LeftChildTest", });
    internal_static_tensorflow_decision_trees_SparseVector_descriptor =
      getDescriptor().getMessageTypes().get(8);
    internal_static_tensorflow_decision_trees_SparseVector_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_decision_trees_SparseVector_descriptor,
        new java.lang.String[] { "SparseValue", });
    internal_static_tensorflow_decision_trees_SparseVector_SparseValueEntry_descriptor =
      internal_static_tensorflow_decision_trees_SparseVector_descriptor.getNestedTypes().get(0);
    internal_static_tensorflow_decision_trees_SparseVector_SparseValueEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_decision_trees_SparseVector_SparseValueEntry_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_tensorflow_decision_trees_Vector_descriptor =
      getDescriptor().getMessageTypes().get(9);
    internal_static_tensorflow_decision_trees_Vector_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_decision_trees_Vector_descriptor,
        new java.lang.String[] { "Value", });
    internal_static_tensorflow_decision_trees_Leaf_descriptor =
      getDescriptor().getMessageTypes().get(10);
    internal_static_tensorflow_decision_trees_Leaf_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_decision_trees_Leaf_descriptor,
        new java.lang.String[] { "Vector", "SparseVector", "AdditionalData", "Leaf", });
    internal_static_tensorflow_decision_trees_FeatureId_descriptor =
      getDescriptor().getMessageTypes().get(11);
    internal_static_tensorflow_decision_trees_FeatureId_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_decision_trees_FeatureId_descriptor,
        new java.lang.String[] { "Id", "AdditionalData", });
    internal_static_tensorflow_decision_trees_ObliqueFeatures_descriptor =
      getDescriptor().getMessageTypes().get(12);
    internal_static_tensorflow_decision_trees_ObliqueFeatures_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_decision_trees_ObliqueFeatures_descriptor,
        new java.lang.String[] { "Features", "Weights", });
    internal_static_tensorflow_decision_trees_InequalityTest_descriptor =
      getDescriptor().getMessageTypes().get(13);
    internal_static_tensorflow_decision_trees_InequalityTest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_decision_trees_InequalityTest_descriptor,
        new java.lang.String[] { "FeatureId", "Oblique", "Type", "Threshold", "FeatureSum", });
    internal_static_tensorflow_decision_trees_Value_descriptor =
      getDescriptor().getMessageTypes().get(14);
    internal_static_tensorflow_decision_trees_Value_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_decision_trees_Value_descriptor,
        new java.lang.String[] { "FloatValue", "DoubleValue", "Int32Value", "Int64Value", "CustomValue", "Value", });
    com.google.protobuf.AnyProto.getDescriptor();
    com.google.protobuf.WrappersProto.getDescriptor();
  }

  // @@protoc_insertion_point(outer_class_scope)
}
