| 347 | |
| 348 | template <typename ColStorageFormat> |
| 349 | void doubletonEquation(HighsInt row, HighsInt colSubst, HighsInt col, |
| 350 | double coefSubst, double coef, double rhs, |
| 351 | double substLower, double substUpper, double substCost, |
| 352 | bool lowerTightened, bool upperTightened, |
| 353 | RowType rowType, |
| 354 | const HighsMatrixSlice<ColStorageFormat>& colVec) { |
| 355 | colValues.clear(); |
| 356 | for (const HighsSliceNonzero& colVal : colVec) |
| 357 | colValues.emplace_back(origRowIndex[colVal.index()], colVal.value()); |
| 358 | |
| 359 | reductionValues.push(DoubletonEquation{ |
| 360 | coef, coefSubst, rhs, substLower, substUpper, substCost, |
| 361 | row == -1 ? -1 : origRowIndex[row], origColIndex[colSubst], |
| 362 | origColIndex[col], lowerTightened, upperTightened, rowType}); |
| 363 | reductionValues.push(colValues); |
| 364 | reductionAdded(ReductionType::kDoubletonEquation); |
| 365 | } |
| 366 | |
| 367 | template <typename RowStorageFormat> |
| 368 | void equalityRowAddition(HighsInt row, HighsInt addedEqRow, double eqRowScale, |
no test coverage detected