| 262 | } |
| 263 | |
| 264 | TVector<ui32> GetTreeNodeToLeaf(const TFullModel& model, size_t treeIdx) { |
| 265 | CB_ENSURE(treeIdx < model.GetTreeCount(), |
| 266 | "Requested tree leaves for nodes for tree " << treeIdx << ", but model has " << model.GetTreeCount()); |
| 267 | Y_ASSERT(!model.IsOblivious()); |
| 268 | const size_t offset = model.ModelTrees->GetModelTreeData()->GetTreeStartOffsets()[treeIdx]; |
| 269 | const auto start = model.ModelTrees->GetModelTreeData()->GetNonSymmetricNodeIdToLeafId().begin() + offset; |
| 270 | const auto end = start + model.ModelTrees->GetModelTreeData()->GetTreeSizes()[treeIdx]; |
| 271 | auto applyData = model.ModelTrees->GetApplyData(); |
| 272 | const size_t firstLeafOffset = applyData->TreeFirstLeafOffsets[treeIdx]; |
| 273 | const size_t dimensionsCount = model.GetDimensionsCount(); |
| 274 | TVector<ui32> nodeToLeaf(start, end); |
| 275 | for (auto& value : nodeToLeaf) { |
| 276 | value = (value - firstLeafOffset) / dimensionsCount; |
| 277 | } |
| 278 | return nodeToLeaf; |
| 279 | } |
nothing calls this directly
no test coverage detected