blob: c75bb3935222effd3daa0933f959b7c8063930d0 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_ASSIST_RANKER_RANKER_EXAMPLE_UTIL_H_
#define COMPONENTS_ASSIST_RANKER_RANKER_EXAMPLE_UTIL_H_
#include "base/compiler_specific.h"
#include "components/assist_ranker/proto/ranker_example.pb.h"
namespace assist_ranker {
// If |key| feature is found in |example|, fills in |feature| and return true.
// Returns false if the feature is not found. |feature| can be nullptr. In such
// a case, the return value is not changed, but |feature| will not be filled in.
// This can be used to check for the presence of a key.
bool SafeGetFeature(const std::string& key,
const RankerExample& example,
Feature* feature) WARN_UNUSED_RESULT;
// Extract value from |feature| for scalar feature types. Returns true and fills
// in |value| if the feature is found and has a float, int32 or bool value.
// Returns false otherwise.
bool GetFeatureValueAsFloat(const std::string& key,
const RankerExample& example,
float* value) WARN_UNUSED_RESULT;
// Converts a Ranker Feature to an int64. For feature list, this converts the
// index-th value of the list.
// A feature is converted to an int64 by:
// (a) use low32 bits represent the value of the feature.
// a.1) bool_value, int32_value is directly converted to an int32.
// a.2) string_value is hashed to an int32.
// a.3) float_value is directly bit_cast into int32 if it follows ieee754
// standard; otherwise manually calculate sign, exponent and mantissa.
// (b) use high32 bits represent the type of the feature.
// b.1) use high8 bits represent the feature_type_case.
// b.2) use low24 bits represent the index if the feature is a list.
// Returns true if the feature is converted successfully; false otherwise.
bool FeatureToInt64(const Feature& feature, int64_t* res, int index = 0);
// Extract category from one-hot feature. Returns true and fills
// in |value| if the feature is found and is of type string_value. Returns false
// otherwise.
bool GetOneHotValue(const std::string& key,
const RankerExample& example,
std::string* value) WARN_UNUSED_RESULT;
// Converts a string to a hex ahsh string.
std::string HashFeatureName(const std::string& feature_name);
// Hashes feature names to an hex string.
// Features logged through UKM will apply this transformation when logging
// features, so models trained on UKM data are expected to have hashed input
// feature names.
RankerExample HashExampleFeatureNames(const RankerExample& example);
} // namespace assist_ranker
#endif // COMPONENTS_ASSIST_RANKER_RANKER_EXAMPLE_UTIL_H_