| 25 | |
| 26 | |
| 27 | void ProcessIgnoredFeaturesList( |
| 28 | TConstArrayRef<ui32> ignoredFeatures, // [flatFeatureIdx] |
| 29 | TMaybe<TString> allFeaturesIgnoredMessage, |
| 30 | TDataMetaInfo* dataMetaInfo, // inout, must be inited, only ignored flags are updated |
| 31 | TVector<bool>* ignoredFeaturesMask // [flatFeatureIdx], out |
| 32 | ) { |
| 33 | CB_ENSURE_INTERNAL( |
| 34 | dataMetaInfo->FeaturesLayout, |
| 35 | "ProcessIgnoredFeaturesList: TDataMetaInfo must be inited" |
| 36 | ); |
| 37 | |
| 38 | const ui32 featureCount = dataMetaInfo->GetFeatureCount(); |
| 39 | |
| 40 | ignoredFeaturesMask->assign((size_t)featureCount, false); |
| 41 | |
| 42 | ui32 ignoredFeaturesInDataCount = 0; |
| 43 | for (auto ignoredFeatureFlatIdx : ignoredFeatures) { |
| 44 | if (ignoredFeatureFlatIdx >= featureCount) { |
| 45 | continue; |
| 46 | } |
| 47 | |
| 48 | dataMetaInfo->FeaturesLayout->IgnoreExternalFeature(ignoredFeatureFlatIdx); |
| 49 | |
| 50 | // handle possible duplicates |
| 51 | ignoredFeaturesInDataCount += (*ignoredFeaturesMask)[ignoredFeatureFlatIdx] == false; |
| 52 | (*ignoredFeaturesMask)[ignoredFeatureFlatIdx] = true; |
| 53 | } |
| 54 | CB_ENSURE( |
| 55 | featureCount > ignoredFeaturesInDataCount, |
| 56 | (allFeaturesIgnoredMessage.Defined() ? |
| 57 | *allFeaturesIgnoredMessage |
| 58 | : "All features are requested to be ignored")); |
| 59 | } |
| 60 | |
| 61 | |
| 62 | static TVector<TVector<float>> ReadBaseline(const TPathWithScheme& filePath, ui64 docCount, TDatasetSubset loadSubset, const TVector<TString>& classNames) { |
no test coverage detected