11588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower// Copyright 2017 The TensorFlow Authors. All Rights Reserved.
21588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower//
31588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower// Licensed under the Apache License, Version 2.0 (the "License");
41588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower// you may not use this file except in compliance with the License.
51588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower// You may obtain a copy of the License at
61588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower//
71588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower//     http://www.apache.org/licenses/LICENSE-2.0
81588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower//
91588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower// Unless required by applicable law or agreed to in writing, software
101588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower// distributed under the License is distributed on an "AS IS" BASIS,
111588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
121588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower// See the License for the specific language governing permissions and
131588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower// limitations under the License.
141588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower// =============================================================================
151588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower#include "tensorflow/contrib/tensor_forest/kernels/v4/params.h"
161588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower#include <math.h>
171588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower#include <stdlib.h>
181588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower#include "tensorflow/core/platform/logging.h"
191588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower
201588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlowernamespace tensorflow {
211588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlowernamespace tensorforest {
221588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower
231588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlowerfloat ResolveParam(const DepthDependentParam& param, int32 depth) {
241588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower  float val;
251588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower  switch (param.ParamType_case()) {
261588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower    case DepthDependentParam::kConstantValue:
271588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower      return param.constant_value();
281588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower
291588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower    case DepthDependentParam::kLinear:
301588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower      val = depth * param.linear().slope() + param.linear().y_intercept();
311588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower      return std::min(std::max(val, param.linear().min_val()),
321588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower                      param.linear().max_val());
331588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower
341588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower    case DepthDependentParam::kExponential:
351588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower      return param.exponential().bias() +
361588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower             param.exponential().multiplier() *
371588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower                 static_cast<float>(
381588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower                     pow(param.exponential().base(),
391588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower                         param.exponential().depth_multiplier() * depth));
401588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower
411588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower    case DepthDependentParam::kThreshold:
421588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower      if (depth >= param.threshold().threshold()) {
431588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower        return param.threshold().on_value();
441588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower      } else {
451588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower        return param.threshold().off_value();
461588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower      }
471588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower
481588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower    default:
491588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower      LOG(FATAL) << "unknown parameter type";
501588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower  }
511588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower}
521588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower
531588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower}  // namespace tensorforest
541588d3790d759ee8a50e2bcf17b1eeadca69ba30A. Unique TensorFlower}  // namespace tensorflow
55