18#include "absl/log/check.h"
19#include "absl/types/span.h"
27template <
typename SparseColumnLike>
31 sum +=
Square(e.coefficient());
78 const int end = data.size();
79 const int shifted_end =
end - 3;
84 for (; i < shifted_end; i += 4) {
85 sum1 += data[i] * data[i];
86 sum2 += data[i + 1] * data[i + 1];
87 sum3 += data[i + 2] * data[i + 2];
88 sum4 += data[i + 3] * data[i + 3];
92 sum += data[i] * data[i];
94 sum += data[i + 1] * data[i + 1];
96 sum += data[i + 2] * data[i + 2];
107 const int end = data.size();
108 const int shifted_end =
end - 3;
113 for (; i < shifted_end; i += 4) {
114 sum1 += data[i] * data[i];
115 sum2 += data[i + 1] * data[i + 1];
116 sum3 += data[i + 2] * data[i + 2];
117 sum4 += data[i + 3] * data[i + 3];
125 sum += data[i] * data[i];
128 sum += data[i + 1] * data[i + 1];
131 sum += data[i + 2] * data[i + 2];
145 for (RowIndex row(0); row < column.
size(); ++row) {
153 for (RowIndex row(0); row < v.
size(); ++row) {
154 infinity_norm = std::max(infinity_norm, fabs(v[row]));
156 return infinity_norm;
159template <
typename SparseColumnLike>
163 infinity_norm = std::max(infinity_norm, fabs(e.coefficient()));
165 return infinity_norm;
177 if (row.empty())
return 0.0;
179 for (ColIndex col(0); col < row.
size(); ++col) {
182 return static_cast<double>(sum) / row.
size().value();
187 for (ColIndex col(0); col < row->
size(); ++col) {
188 if (fabs((*row)[col]) < threshold) {
196 for (RowIndex row(0); row < column->size(); ++row) {
197 if (fabs((*column)[row]) < threshold) {
205 RowIndex* row_index) {
208 if (rows_to_consider[e.row()] && fabs(e.coefficient()) > infinity_norm) {
209 infinity_norm = fabs(e.coefficient());
210 *row_index = e.row();
213 return infinity_norm;
218 if (e.coefficient() != 0.0) {
219 (*b)[e.row()] =
false;
226 DCHECK_GE(radius[e.row()], 0.0);
227 if (fabs(e.coefficient()) > radius[e.row()])
return false;
void Add(const FpNumber &value)
typename Iterator::Entry Entry
double Density(const DenseRow &row)
void RemoveNearZeroEntries(Fractional threshold, DenseRow *row)
Fractional Square(Fractional f)
StrictITIVector< RowIndex, bool > DenseBooleanColumn
AccurateSum< Fractional > KahanSum
Fractional InfinityNormTemplate(const SparseColumnLike &column)
Fractional SquaredNormTemplate(const SparseColumnLike &column)
Fractional PreciseSquaredNorm(const SparseColumn &v)
Fractional RestrictedInfinityNorm(const ColumnView &column, const DenseBooleanColumn &rows_to_consider, RowIndex *row_index)
Fractional InfinityNorm(const DenseColumn &v)
void SetSupportToFalse(const ColumnView &column, DenseBooleanColumn *b)
Fractional SquaredNorm(const SparseColumn &v)
StrictITIVector< RowIndex, Fractional > DenseColumn
StrictITIVector< ColIndex, Fractional > DenseRow
bool IsDominated(const ColumnView &column, const DenseColumn &radius)
Fractional SquaredNormAndResetToZero(absl::Span< Fractional > data)
ClosedInterval::Iterator end(ClosedInterval interval)
StrictITIVector< Index, Fractional > values
bool ShouldUseDenseIteration(double ratio_for_using_dense_representation) const
std::vector< Index > non_zeros