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

Function QuantizeNonDefaultValues

catboost/libs/data/quantization.cpp:938–980  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

936 // TCallback accepts (dstIndex, quantizedValue) arguments
937 template <class TSrc, class TCallback>
938 static void QuantizeNonDefaultValues(
939 const TSrc& srcFeature,
940 const TIncrementalDenseIndexing& incrementalDenseIndexing,
941 TValueQuantizer<TSrc> valueQuantizer,
942 NPar::ILocalExecutor* localExecutor,
943 TCallback&& callback
944 ) {
945 using TValueType = typename TSrc::TValueType;
946 using TDenseSrcData = TPolymorphicArrayValuesHolder<TSrc>;
947 using TSparseSrcData = TSparsePolymorphicArrayValuesHolder<TSrc>;
948
949 if (const auto* denseSrcFeature = dynamic_cast<const TDenseSrcData*>(&srcFeature)){
950 if (std::get_if<TIndexedSubset<ui32>>(&incrementalDenseIndexing.SrcSubsetIndexing)) {
951 TConstArrayRef<ui32> dstIndices
952 = std::get<TIndexedSubset<ui32>>(incrementalDenseIndexing.DstIndexing);
953
954 denseSrcFeature->GetData()->CloneWithNewSubsetIndexing(
955 &incrementalDenseIndexing.SrcSubsetIndexing
956 )->ParallelForEach(
957 [=] (ui32 i, TValueType srcValue) {
958 callback(dstIndices[i], valueQuantizer.Quantize(srcValue));
959 },
960 localExecutor
961 );
962 } else {
963 denseSrcFeature->GetData()->ParallelForEach(
964 [=] (ui32 dstIdx, TValueType srcValue) {
965 callback(dstIdx, valueQuantizer.Quantize(srcValue));
966 },
967 localExecutor
968 );
969 }
970 } else if (const auto* sparseSrcFeature = dynamic_cast<const TSparseSrcData*>(&srcFeature)) {
971 const auto& sparseArray = sparseSrcFeature->GetData();
972 sparseArray.ForEachNonDefault(
973 [=] (ui32 dstIdx, TValueType srcValue) {
974 callback(dstIdx, valueQuantizer.Quantize(srcValue));
975 }
976 );
977 } else {
978 CB_ENSURE_INTERNAL(false, "QuantizeNonDefaultValues: unsupported src feature type");
979 }
980 }
981
982 template <
983 class TStoredDstValue,

Calls 6

ForEachNonDefaultMethod · 0.80
callbackFunction · 0.50
ParallelForEachMethod · 0.45
GetDataMethod · 0.45
QuantizeMethod · 0.45

Tested by

no test coverage detected