#include <functions/Mexp.h>
#include <matrix/matexp.h>
#include <sarray/SArray.h>

using std::vector;

Mexp::Mexp()
  : Function("mexp",1)
{
}

void
Mexp::evaluate (SArray &value, vector <SArray const *> const &args) const
{
  int n = args[0]->dim(true)[0];
  int N = args[0]->length();
  double *expmat = new double[N];
  MatrixExpPade(expmat, args[0]->value(), n, 1);
  value.setValue(expmat, N);
  delete [] expmat;
}

Index Mexp::dim (vector <SArray const *> const &args) const
{
  return args[0]->dim(true);
}

bool Mexp::checkParameterDim (vector <SArray const *> const &args) const
{
  Index const &dim = args[0]->dim(true);
  return (dim.size() == 2) && (dim[0] == dim[1]);
}


syntax highlighted by Code2HTML, v. 0.9.1