4#ifndef XGBOOST_TREE_IO_UTILS_H_
5#define XGBOOST_TREE_IO_UTILS_H_
10#include "xgboost/json.h"
14using FloatArrayT = std::conditional_t<typed, F32Array const, Array const>;
16using U8ArrayT = std::conditional_t<typed, U8Array const, Array const>;
18using I32ArrayT = std::conditional_t<typed, I32Array const, Array const>;
20using I64ArrayT = std::conditional_t<typed, I64Array const, Array const>;
21template <
bool typed,
bool feature_is_64>
22using IndexArrayT = std::conditional_t<feature_is_64, I64ArrayT<typed>, I32ArrayT<typed>>;
25template <
typename JT,
typename T>
26std::enable_if_t<!std::is_same<T, Json>::value && !std::is_same<JT, Boolean>::value, T> GetElem(
27 std::vector<T>
const& arr,
size_t i) {
31template <
typename JT,
typename T>
32std::enable_if_t<!std::is_same<T, Json>::value && std::is_same<T, uint8_t>::value &&
33 std::is_same<JT, Boolean>::value,
35GetElem(std::vector<T>
const& arr,
size_t i) {
39template <
typename JT,
typename T>
41 std::is_same<T, Json>::value,
42 std::conditional_t<std::is_same<JT, Integer>::value, int64_t,
43 std::conditional_t<std::is_same<Boolean, JT>::value, bool,
float>>>
44GetElem(std::vector<T>
const& arr,
size_t i) {
45 if (std::is_same<JT, Boolean>::value && !IsA<Boolean>(arr[i])) {
46 return get<Integer const>(arr[i]) == 1;
48 return get<JT const>(arr[i]);
52inline std::string
const kLossChg{
"loss_changes"};
53inline std::string
const kSumHess{
"sum_hessian"};
54inline std::string
const kBaseWeight{
"base_weights"};
56inline std::string
const kSplitIdx{
"split_indices"};
57inline std::string
const kSplitCond{
"split_conditions"};
58inline std::string
const kDftLeft{
"default_left"};
60inline std::string
const kParent{
"parents"};
61inline std::string
const kLeft{
"left_children"};
62inline std::string
const kRight{
"right_children"};
namespace of xgboost
Definition base.h:90