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

Method GetGroupInfosSubset

catboost/libs/data/target.cpp:1086–1164  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1084
1085
1086void NCB::GetGroupInfosSubset(
1087 TConstArrayRef<TQueryInfo> src,
1088 const TObjectsGroupingSubset& objectsGroupingSubset,
1089 NPar::ILocalExecutor* localExecutor,
1090 TVector<TQueryInfo>* dstSubset
1091) {
1092 const TObjectsGrouping& dstSubsetGrouping = *(objectsGroupingSubset.GetSubsetGrouping());
1093
1094 // resize, not yresize because TQueryInfo is not POD type
1095 dstSubset->resize(dstSubsetGrouping.GetGroupCount());
1096
1097 if (dstSubsetGrouping.GetGroupCount() != 0) {
1098 const auto& subsetObjectsIndexing = objectsGroupingSubset.GetObjectsIndexing();
1099
1100 TConstArrayRef<ui32> indexedSubset;
1101 TVector<ui32> indexedSubsetStorage;
1102 if (std::holds_alternative<TIndexedSubset<ui32>>(subsetObjectsIndexing)) {
1103 indexedSubset = subsetObjectsIndexing.Get<TIndexedSubset<ui32>>();
1104 } else {
1105 indexedSubsetStorage.yresize(subsetObjectsIndexing.Size());
1106 subsetObjectsIndexing.ParallelForEach(
1107 [&](ui32 idx, ui32 srcIdx) { indexedSubsetStorage[idx] = srcIdx; },
1108 localExecutor
1109 );
1110 indexedSubset = indexedSubsetStorage;
1111 }
1112
1113
1114 // CB_ENSURE inside is ok, groups must be nontrivial if there is groupInfo data in some targets
1115 TConstArrayRef<TGroupBounds> dstSubsetGroupBounds = dstSubsetGrouping.GetNonTrivialGroups();
1116
1117 objectsGroupingSubset.GetGroupsIndexing().ParallelForEach(
1118 [&] (ui32 dstGroupIdx, ui32 srcGroupIdx) {
1119 const auto& srcGroupData = src[srcGroupIdx];
1120 auto& dstGroupData = (*dstSubset)[dstGroupIdx];
1121 ((TGroupBounds&)dstGroupData) = dstSubsetGroupBounds[dstGroupIdx];
1122
1123 dstGroupData.Weight = srcGroupData.Weight;
1124
1125 auto getSrcIdxInGroup = [&](ui32 dstIdxInGroup) {
1126 return indexedSubset[dstGroupData.Begin + dstIdxInGroup] - srcGroupData.Begin;
1127 };
1128
1129 if (!srcGroupData.SubgroupId.empty()) {
1130 dstGroupData.SubgroupId.yresize(dstGroupData.GetSize());
1131 for (auto dstIdxInGroup : xrange(dstGroupData.GetSize())) {
1132 dstGroupData.SubgroupId[dstIdxInGroup] =
1133 srcGroupData.SubgroupId[getSrcIdxInGroup(dstIdxInGroup)];
1134 }
1135 }
1136 if (!srcGroupData.Competitors.empty()) {
1137 // srcIdxInGroup -> dstIdxInGroup
1138 TVector<ui32> invertedGroupPermutation;
1139 invertedGroupPermutation.yresize(dstGroupData.GetSize());
1140 for (auto dstIdxInGroup : xrange(dstGroupData.GetSize())) {
1141 invertedGroupPermutation[getSrcIdxInGroup(dstIdxInGroup)] = dstIdxInGroup;
1142 }
1143

Callers

nothing calls this directly

Calls 11

xrangeFunction · 0.85
GetSubsetGroupingMethod · 0.80
GetGroupCountMethod · 0.80
yresizeMethod · 0.80
GetNonTrivialGroupsMethod · 0.80
resizeMethod · 0.45
SizeMethod · 0.45
ParallelForEachMethod · 0.45
emptyMethod · 0.45
GetSizeMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected