// SPDX-FileCopyrightText: The Eigen Authors
// SPDX-License-Identifier: MPL-2.0

#include <Eigen/Sparse>
#include <vector>
#include <iostream>

typedef Eigen::SparseMatrix<double> SpMat;  // declares a column-major sparse matrix type of double
typedef Eigen::Triplet<double> T;

void buildProblem(std::vector<T>& coefficients, Eigen::VectorXd& b, int n);
void saveAsBitmap(const Eigen::VectorXd& x, int n, const char* filename);

int main(int argc, char** argv) {
  if (argc != 2) {
    std::cerr << "Error: expected one and only one argument.\n";
    return -1;
  }

  int n = 300;    // size of the image
  int m = n * n;  // number of unknowns (=number of pixels)

  // Assembly:
  std::vector<T> coefficients;  // list of non-zeros coefficients
  Eigen::VectorXd b(m);         // the right hand side-vector resulting from the constraints
  buildProblem(coefficients, b, n);

  SpMat A(m, m);
  A.setFromTriplets(coefficients.begin(), coefficients.end());

  // Solving:
  Eigen::SimplicialCholesky<SpMat> chol(A);  // performs a Cholesky factorization of A
  Eigen::VectorXd x = chol.solve(b);         // use the factorization to solve for the given right hand side

  // Export the result to a file:
  saveAsBitmap(x, n, argv[1]);

  return 0;
}
