37template <
typename _Scalar>
44 std::map<size_t, size_t> rows_implicit_to_dense;
45 std::map<size_t, size_t> cols_implicit_to_dense;
63 rows_implicit_to_dense {rows_implicit_to_dense},
64 cols_implicit_to_dense {cols_implicit_to_dense},
68 if (this->rows_implicit_to_dense.size() != this->M.rows()) {
69 throw std::invalid_argument(
"ImplicitMatrixSlice(const std::map<size_t, size_t>&, const std::map<size_t, size_t>&, const MatrixX<Scalar>&): The given dense representation of the slice does not have a compatible number of rows.");
72 if (this->cols_implicit_to_dense.size() != this->M.cols()) {
73 throw std::invalid_argument(
"ImplicitMatrixSlice(const std::map<size_t, size_t>&, const std::map<size_t, size_t>&, const MatrixX<Scalar>&): The given dense representation of the slice does not have a compatible number of columns.");
84 ImplicitMatrixSlice(
const std::map<size_t, size_t>& rows_implicit_to_dense,
const std::map<size_t, size_t>& cols_implicit_to_dense) :
86 MatrixX<
Scalar>::Zero(rows_implicit_to_dense.size(), cols_implicit_to_dense.size())) {}
115 std::vector<size_t> row_indices(row_end - row_start);
116 std::iota(row_indices.begin(), row_indices.end(), row_start);
118 std::vector<size_t> col_indices(col_end - col_start);
119 std::iota(col_indices.begin(), col_indices.end(), col_start);
137 std::map<size_t, size_t> rows_map;
138 size_t dense_row_index = 0;
139 for (
const auto& implicit_row_index : row_indices) {
141 rows_map[implicit_row_index] = dense_row_index;
145 std::map<size_t, size_t> cols_map;
146 size_t dense_col_index = 0;
147 for (
const auto& implicit_col_index : col_indices) {
149 cols_map[implicit_col_index] = dense_col_index;
171 const auto rows = row_end - row_start;
172 const auto cols = col_end - col_start;
214 return this->M(i, j);
232 return this->M(i, j);
253 const std::map<size_t, size_t>&
columnIndexMap()
const {
return this->cols_implicit_to_dense; }
271 size_t denseIndexOfRow(
const size_t row)
const {
return this->rows_implicit_to_dense.at(row); }
276 const std::map<size_t, size_t>&
rowIndexMap()
const {
return this->rows_implicit_to_dense; }
Definition: ImplicitMatrixSlice.hpp:38
static ImplicitMatrixSlice< Scalar > ZeroFromIndices(const std::vector< size_t > &row_indices, const std::vector< size_t > &col_indices)
Definition: ImplicitMatrixSlice.hpp:187
ImplicitMatrixSlice(const std::map< size_t, size_t > &rows_implicit_to_dense, const std::map< size_t, size_t > &cols_implicit_to_dense)
Definition: ImplicitMatrixSlice.hpp:84
const MatrixX< Scalar > & asMatrix() const
Definition: ImplicitMatrixSlice.hpp:243
VectorX< Scalar > asVector() const
Definition: ImplicitMatrixSlice.hpp:248
static ImplicitMatrixSlice< Scalar > FromBlockRanges(const size_t row_start, const size_t row_end, const size_t col_start, const size_t col_end, const MatrixX< Scalar > &M)
Definition: ImplicitMatrixSlice.hpp:112
Scalar operator()(const size_t row, const size_t col) const
Definition: ImplicitMatrixSlice.hpp:208
Scalar & operator()(const size_t row, const size_t col)
Definition: ImplicitMatrixSlice.hpp:226
_Scalar Scalar
Definition: ImplicitMatrixSlice.hpp:40
static ImplicitMatrixSlice< Scalar > ZeroFromBlockRanges(const size_t row_start, const size_t row_end, const size_t col_start, const size_t col_end)
Definition: ImplicitMatrixSlice.hpp:168
size_t denseIndexOfColumn(const size_t col) const
Definition: ImplicitMatrixSlice.hpp:262
const std::map< size_t, size_t > & columnIndexMap() const
Definition: ImplicitMatrixSlice.hpp:253
static ImplicitMatrixSlice< Scalar > FromIndices(const std::vector< size_t > &row_indices, const std::vector< size_t > &col_indices, const MatrixX< Scalar > &M)
Definition: ImplicitMatrixSlice.hpp:134
const std::map< size_t, size_t > & rowIndexMap() const
Definition: ImplicitMatrixSlice.hpp:276
size_t denseIndexOfRow(const size_t row) const
Definition: ImplicitMatrixSlice.hpp:271
ImplicitMatrixSlice()
Definition: ImplicitMatrixSlice.hpp:92
ImplicitMatrixSlice(const std::map< size_t, size_t > &rows_implicit_to_dense, const std::map< size_t, size_t > &cols_implicit_to_dense, const MatrixX< Scalar > &M)
Definition: ImplicitMatrixSlice.hpp:62
Definition: Matrix.hpp:47
Definition: BaseOneElectronIntegralBuffer.hpp:25