| 75 | } |
| 76 | |
| 77 | void ValidateColumnOutput( |
| 78 | const TVector<TVector<TString>>& outputColumns, |
| 79 | const TDataProvider& pool, |
| 80 | bool cvMode) |
| 81 | { |
| 82 | THashSet<TString> featureIds; |
| 83 | for (const auto& featureMetaInfo : pool.MetaInfo.FeaturesLayout->GetExternalFeaturesMetaInfo()) { |
| 84 | featureIds.emplace(featureMetaInfo.Name); |
| 85 | } |
| 86 | THashSet<TString> auxiliaryColumnNames; |
| 87 | if (pool.MetaInfo.ColumnsInfo.Defined()) { |
| 88 | for (const auto& columnMetaInfo : pool.MetaInfo.ColumnsInfo->Columns) { |
| 89 | if (columnMetaInfo.Type == EColumn::Auxiliary && columnMetaInfo.Id) { |
| 90 | auxiliaryColumnNames.insert(columnMetaInfo.Id); |
| 91 | } |
| 92 | } |
| 93 | } |
| 94 | |
| 95 | bool notQuantizedPool = bool(dynamic_cast<TRawObjectsDataProvider*>(pool.ObjectsData.Get())); |
| 96 | |
| 97 | for (const auto& columns : outputColumns) { |
| 98 | bool hasPrediction = false; |
| 99 | |
| 100 | for (const auto& name : columns) { |
| 101 | EPredictionType predictionType; |
| 102 | if (TryFromString<EPredictionType>(name, predictionType)) { |
| 103 | hasPrediction = true; |
| 104 | continue; |
| 105 | } |
| 106 | |
| 107 | EColumn columnType; |
| 108 | if (TryFromString<EColumn>(ToCanonicalColumnName(name), columnType)) { |
| 109 | switch (columnType) { |
| 110 | case (EColumn::Label): |
| 111 | CB_ENSURE( |
| 112 | pool.MetaInfo.TargetCount > 0, |
| 113 | "bad output column name " << name << " (No target/label info in pool)" |
| 114 | ); |
| 115 | break; |
| 116 | case (EColumn::Baseline): |
| 117 | CB_ENSURE( |
| 118 | pool.MetaInfo.BaselineCount > 0, |
| 119 | "bad output column name " << name << " (No baseline info in pool)" |
| 120 | ); |
| 121 | break; |
| 122 | case (EColumn::Weight): |
| 123 | CB_ENSURE( |
| 124 | pool.MetaInfo.HasWeights, |
| 125 | "bad output column name " << name << " (No Weight info in pool)" |
| 126 | ); |
| 127 | break; |
| 128 | case (EColumn::GroupId): |
| 129 | CB_ENSURE( |
| 130 | pool.MetaInfo.HasGroupId, |
| 131 | "bad output column name " << name << " (No GroupId info in pool)" |
| 132 | ); |
| 133 | break; |
| 134 | case (EColumn::SubgroupId): |
no test coverage detected