MCPcopy Create free account
hub / github.com/catboost/catboost / GetSubset

Method GetSubset

catboost/libs/data/objects_grouping.cpp:27–123  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

25
26
27TObjectsGroupingSubset NCB::GetSubset(
28 TObjectsGroupingPtr objectsGrouping,
29 TArraySubsetIndexing<ui32>&& groupsSubset,
30 EObjectsOrder groupSubsetOrder
31) {
32 if (objectsGrouping->IsTrivial()) {
33 return TObjectsGroupingSubset(
34 ::std::holds_alternative<TFullSubset<ui32>>(groupsSubset) ?
35 objectsGrouping : MakeIntrusive<TObjectsGrouping>(groupsSubset.Size()),
36 std::move(groupsSubset),
37 groupSubsetOrder
38 );
39 } else {
40 TMaybe<TArraySubsetIndexing<ui32>> objectsSubset;
41 TVector<TGroupBounds> subsetGroupBounds;
42
43 if (std::holds_alternative<TFullSubset<ui32>>(groupsSubset)) {
44 objectsSubset = MakeMaybe<TArraySubsetIndexing<ui32>>(
45 TFullSubset<ui32>(objectsGrouping->GetObjectCount())
46 );
47 return TObjectsGroupingSubset(
48 objectsGrouping,
49 std::move(groupsSubset),
50 groupSubsetOrder,
51 MakeMaybe<TArraySubsetIndexing<ui32>>(
52 TFullSubset<ui32>(objectsGrouping->GetObjectCount())
53 ),
54 groupSubsetOrder
55 );
56 } else if (const auto* ranges = std::get_if<TRangesSubset<ui32>>(&groupsSubset)) {
57 const auto& groupsSubsetBlocks = ranges->Blocks;
58
59 ui32 srcObjectCount = objectsGrouping->GetObjectCount();
60 auto nontrivialSrcGroups = objectsGrouping->GetNonTrivialGroups();
61
62 subsetGroupBounds.reserve(groupsSubset.Size());
63
64 TVector<TSubsetBlock<ui32>> objectsSubsetBlocks;
65 objectsSubsetBlocks.reserve(groupsSubsetBlocks.size());
66
67 ui32 objectsDstBegin = 0;
68 for (const auto& groupSubsetBlock : groupsSubsetBlocks) {
69 objectsSubsetBlocks.emplace_back(
70 TIndexRange<ui32>(
71 nontrivialSrcGroups[groupSubsetBlock.SrcBegin].Begin,
72 (groupSubsetBlock.SrcEnd == nontrivialSrcGroups.size() ?
73 srcObjectCount : nontrivialSrcGroups[groupSubsetBlock.SrcEnd].Begin)
74 ),
75 objectsDstBegin
76 );
77
78 for (auto srcGroupIdx : xrange(groupSubsetBlock.SrcBegin, groupSubsetBlock.SrcEnd)) {
79 subsetGroupBounds.emplace_back(
80 objectsDstBegin,
81 objectsDstBegin + nontrivialSrcGroups[srcGroupIdx].GetSize()
82 );
83 objectsDstBegin += subsetGroupBounds.back().GetSize();
84 }

Callers

nothing calls this directly

Calls 12

xrangeFunction · 0.85
GetNonTrivialGroupsMethod · 0.80
moveFunction · 0.50
IsTrivialMethod · 0.45
SizeMethod · 0.45
GetObjectCountMethod · 0.45
reserveMethod · 0.45
sizeMethod · 0.45
emplace_backMethod · 0.45
GetSizeMethod · 0.45
backMethod · 0.45

Tested by

no test coverage detected