23 #include <pybind11/pybind11.h> 
   27 #include "ndarray/pybind11.h" 
   33 using namespace pybind11::literals;
 
   37 template <
typename T1, 
typename T2, 
int C1, 
int C2>
 
   39     py::class_<LeastSquares> 
cls(mod, 
"LeastSquares");
 
   40     py::enum_<LeastSquares::Factorization>(
cls, 
"Factorization")
 
   41             .value(
"NORMAL_EIGENSYSTEM", LeastSquares::Factorization::NORMAL_EIGENSYSTEM)
 
   42             .value(
"NORMAL_CHOLESKY", LeastSquares::Factorization::NORMAL_CHOLESKY)
 
   43             .value(
"DIRECT_SVD", LeastSquares::Factorization::DIRECT_SVD)
 
   45     cls.def_static(
"fromDesignMatrix",
 
   46                    (
LeastSquares(*)(ndarray::Array<T1, 2, C1> 
const &, ndarray::Array<T2, 1, C2> 
const &,
 
   48                            LeastSquares::fromDesignMatrix<T1, T2, C1, C2>,
 
   49                    "design"_a, 
"data"_a, 
"factorization"_a = LeastSquares::NORMAL_EIGENSYSTEM);
 
   50     cls.def_static(
"fromNormalEquations",
 
   51                    (
LeastSquares(*)(ndarray::Array<T1, 2, C1> 
const &, ndarray::Array<T2, 1, C2> 
const &,
 
   53                            LeastSquares::fromNormalEquations<T1, T2, C1, C2>,
 
   54                    "fisher"_a, 
"rhs"_a, 
"factorization"_a = LeastSquares::NORMAL_EIGENSYSTEM);
 
   55     cls.def(
"getRank", &LeastSquares::getRank);
 
   56     cls.def(
"setDesignMatrix",
 
   57             (
void (
LeastSquares::*)(ndarray::Array<T1, 2, C1> 
const &, ndarray::Array<T2, 1, C2> 
const &)) &
 
   58                     LeastSquares::setDesignMatrix<T1, T2, C1, C2>);
 
   59     cls.def(
"getDimension", &LeastSquares::getDimension);
 
   60     cls.def(
"setNormalEquations",
 
   61             (
void (
LeastSquares::*)(ndarray::Array<T1, 2, C1> 
const &, ndarray::Array<T2, 1, C2> 
const &)) &
 
   62                     LeastSquares::setNormalEquations<T1, T2, C1, C2>);
 
   63     cls.def(
"getSolution", &LeastSquares::getSolution);
 
   64     cls.def(
"getFisherMatrix", &LeastSquares::getFisherMatrix);
 
   65     cls.def(
"getCovariance", &LeastSquares::getCovariance);
 
   66     cls.def(
"getFactorization", &LeastSquares::getFactorization);
 
   67     cls.def(
"getDiagnostic", &LeastSquares::getDiagnostic);
 
   68     cls.def(
"getThreshold", &LeastSquares::getThreshold);
 
   69     cls.def(
"setThreshold", &LeastSquares::setThreshold);
 
   73     declareLeastSquares<double, double, 0, 0>(mod);