| 110 | } |
| 111 | |
| 112 | bool TDsvBaselineReader::Read(TObjectBaselineData* data, ui64* objectIdx) { |
| 113 | TString line; |
| 114 | |
| 115 | while (true) { |
| 116 | if (!Reader_->ReadLine(&line, objectIdx)) { |
| 117 | return false; |
| 118 | } |
| 119 | if (Range_.Contains(*objectIdx)) { |
| 120 | break; |
| 121 | } |
| 122 | } |
| 123 | data->Baseline.yresize(BaselineIndexes_.size()); |
| 124 | |
| 125 | ui32 baselineIdx = 0; |
| 126 | ui32 columnIdx = 0; |
| 127 | for (const TStringBuf token : StringSplitter(line).Split(DELIMITER_)) { |
| 128 | Y_DEFER { ++columnIdx; }; |
| 129 | |
| 130 | CB_ENSURE( |
| 131 | columnIdx < BaselineSize_, |
| 132 | "Too many columns in baseline file line " << LabeledOutput(*objectIdx) |
| 133 | ); |
| 134 | |
| 135 | if (baselineIdx >= BaselineIndexes_.size() || columnIdx != BaselineIndexes_[baselineIdx]) { |
| 136 | continue; |
| 137 | } |
| 138 | |
| 139 | CB_ENSURE(!token.empty(), "Empty token in baseline file line " << LabeledOutput(*objectIdx)); |
| 140 | |
| 141 | float baseline; |
| 142 | CB_ENSURE( |
| 143 | TryFromString(token, baseline), |
| 144 | "Failed to parse float " << LabeledOutput(token) << " in baseline file line " |
| 145 | << LabeledOutput(*objectIdx) |
| 146 | ); |
| 147 | data->Baseline[baselineIdx] = baseline; |
| 148 | |
| 149 | ++baselineIdx; |
| 150 | } |
| 151 | |
| 152 | CB_ENSURE(columnIdx == BaselineSize_, "Not enough columns in baseline file line " << LabeledOutput(*objectIdx)); |
| 153 | *objectIdx -= Range_.Begin; |
| 154 | |
| 155 | return true; |
| 156 | } |
| 157 | |
| 158 | void UpdateClassLabelsFromBaselineFile( |
| 159 | const TPathWithScheme& baselineFilePath, |
no test coverage detected