LSSTApplications  20.0.0
LSSTDataManagementBasePackage
gaussianProcess.cc
Go to the documentation of this file.
1 /*
2  * LSST Data Management System
3  * Copyright 2008-2016 AURA/LSST.
4  *
5  * This product includes software developed by the
6  * LSST Project (http://www.lsst.org/).
7  *
8  * This program is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the LSST License Statement and
19  * the GNU General Public License along with this program. If not,
20  * see <https://www.lsstcorp.org/LegalNotices/>.
21  */
22 
23 #include <pybind11/pybind11.h>
24 //#include <pybind11/operators.h>
25 #include <pybind11/stl.h>
26 
27 #include "ndarray/pybind11.h"
28 
30 
31 namespace py = pybind11;
32 
33 using namespace lsst::afw::math;
34 
35 template <typename T>
36 void declareKdTree(py::module &mod, const std::string &suffix) {
37  py::class_<KdTree<T>> clsKdTree(mod, ("KdTree" + suffix).c_str());
38  clsKdTree.def(py::init<>());
39  clsKdTree.def("Initialize", &KdTree<T>::Initialize);
40  clsKdTree.def("removePoint", &KdTree<T>::removePoint);
41  clsKdTree.def("getData", (T (KdTree<T>::*)(int, int) const) & KdTree<T>::getData);
42  clsKdTree.def("getData", (ndarray::Array<T, 1, 1> (KdTree<T>::*)(int) const) & KdTree<T>::getData);
43  clsKdTree.def("addPoint", &KdTree<T>::addPoint);
44  clsKdTree.def("getNPoints", &KdTree<T>::getNPoints);
45  clsKdTree.def("getTreeNode", &KdTree<T>::getTreeNode);
46  clsKdTree.def("findNeighbors", &KdTree<T>::findNeighbors);
47 };
48 
49 template <typename T>
50 void declareCovariograms(py::module &mod, const std::string &suffix) {
51  /* Covariogram */
52  py::class_<Covariogram<T>, std::shared_ptr<Covariogram<T>>> clsCovariogram(
53  mod, ("Covariogram" + suffix).c_str());
54  clsCovariogram.def(py::init<>());
55  clsCovariogram.def("__call__", &Covariogram<T>::operator());
56 
57  /* SquaredExpCovariogram */
58  py::class_<SquaredExpCovariogram<T>, std::shared_ptr<SquaredExpCovariogram<T>>, Covariogram<T>>
59  clsSquaredExpCovariogram(mod, ("SquaredExpCovariogram" + suffix).c_str());
60  clsSquaredExpCovariogram.def(py::init<>());
61  clsSquaredExpCovariogram.def("__call__", &SquaredExpCovariogram<T>::operator());
62  clsSquaredExpCovariogram.def("setEllSquared", &SquaredExpCovariogram<T>::setEllSquared);
63 
64  /* SquaredExpCovariogram */
65  py::class_<NeuralNetCovariogram<T>, std::shared_ptr<NeuralNetCovariogram<T>>, Covariogram<T>>
66  clsNeuralNetCovariogram(mod, ("NeuralNetCovariogram" + suffix).c_str());
67  clsNeuralNetCovariogram.def(py::init<>());
68  clsNeuralNetCovariogram.def("setSigma0", &NeuralNetCovariogram<T>::setSigma0);
69  clsNeuralNetCovariogram.def("setSigma1", &NeuralNetCovariogram<T>::setSigma1);
70 };
71 
72 template <typename T>
73 void declareGaussianProcess(py::module &mod, const std::string &suffix) {
74  py::class_<GaussianProcess<T>> clsGaussianProcess(mod, ("GaussianProcess" + suffix).c_str());
75  /* Constructors */
76  clsGaussianProcess.def(py::init<ndarray::Array<T, 2, 2> const &, ndarray::Array<T, 1, 1> const &,
77  std::shared_ptr<Covariogram<T>> const &>());
78  clsGaussianProcess.def(py::init<ndarray::Array<T, 2, 2> const &, ndarray::Array<T, 1, 1> const &,
79  ndarray::Array<T, 1, 1> const &, ndarray::Array<T, 1, 1> const &,
80  std::shared_ptr<Covariogram<T>> const &>());
81  clsGaussianProcess.def(py::init<ndarray::Array<T, 2, 2> const &, ndarray::Array<T, 2, 2> const &,
82  std::shared_ptr<Covariogram<T>> const &>());
83  clsGaussianProcess.def(py::init<ndarray::Array<T, 2, 2> const &, ndarray::Array<T, 1, 1> const &,
84  ndarray::Array<T, 1, 1> const &, ndarray::Array<T, 2, 2> const &,
85  std::shared_ptr<Covariogram<T>> const &>());
86  /* Members */
87  clsGaussianProcess.def(
88  "interpolate",
89  (T (GaussianProcess<T>::*)(ndarray::Array<T, 1, 1>, ndarray::Array<T, 1, 1> const &, int) const) &
91  clsGaussianProcess.def("interpolate",
92  (void (GaussianProcess<T>::*)(ndarray::Array<T, 1, 1>, ndarray::Array<T, 1, 1>,
93  ndarray::Array<T, 1, 1> const &, int) const) &
95  clsGaussianProcess.def("selfInterpolate",
96  (T (GaussianProcess<T>::*)(ndarray::Array<T, 1, 1>, int, int) const) &
98  clsGaussianProcess.def(
99  "selfInterpolate",
100  (void (GaussianProcess<T>::*)(ndarray::Array<T, 1, 1>, ndarray::Array<T, 1, 1>, int, int) const) &
102  clsGaussianProcess.def("setLambda", &GaussianProcess<T>::setLambda);
103  clsGaussianProcess.def("setCovariogram", &GaussianProcess<T>::setCovariogram);
104  clsGaussianProcess.def("addPoint", (void (GaussianProcess<T>::*)(ndarray::Array<T, 1, 1> const &, T)) &
106  clsGaussianProcess.def("addPoint", (void (GaussianProcess<T>::*)(ndarray::Array<T, 1, 1> const &,
107  ndarray::Array<T, 1, 1> const &)) &
109  clsGaussianProcess.def("batchInterpolate",
110  (void (GaussianProcess<T>::*)(ndarray::Array<T, 1, 1>, ndarray::Array<T, 1, 1>,
111  ndarray::Array<T, 2, 2> const &) const) &
113  clsGaussianProcess.def(
114  "batchInterpolate",
115  (void (GaussianProcess<T>::*)(ndarray::Array<T, 1, 1>, ndarray::Array<T, 2, 2> const &) const) &
117  clsGaussianProcess.def("batchInterpolate",
118  (void (GaussianProcess<T>::*)(ndarray::Array<T, 2, 2>, ndarray::Array<T, 2, 2>,
119  ndarray::Array<T, 2, 2> const &) const) &
121  clsGaussianProcess.def(
122  "batchInterpolate",
123  (void (GaussianProcess<T>::*)(ndarray::Array<T, 2, 2>, ndarray::Array<T, 2, 2> const &) const) &
125  clsGaussianProcess.def("setKrigingParameter", &GaussianProcess<T>::setKrigingParameter);
126  clsGaussianProcess.def("removePoint", &GaussianProcess<T>::removePoint);
127  clsGaussianProcess.def("getNPoints", &GaussianProcess<T>::getNPoints);
128  clsGaussianProcess.def("getData",
129  (void (GaussianProcess<T>::*)(ndarray::Array<T, 2, 2>, ndarray::Array<T, 1, 1>,
130  ndarray::Array<int, 1, 1>) const) &
132  clsGaussianProcess.def("getData",
133  (void (GaussianProcess<T>::*)(ndarray::Array<T, 2, 2>, ndarray::Array<T, 2, 2>,
134  ndarray::Array<int, 1, 1>) const) &
136 };
137 
138 PYBIND11_MODULE(gaussianProcess, mod) {
139  declareCovariograms<double>(mod, "D");
140  declareGaussianProcess<double>(mod, "D");
141  declareKdTree<double>(mod, "D");
142 }
std::string
STL class.
std::shared_ptr
STL class.
declareGaussianProcess
void declareGaussianProcess(py::module &mod, const std::string &suffix)
Definition: gaussianProcess.cc:73
lsst::afw::math::PYBIND11_MODULE
PYBIND11_MODULE(approximate, mod)
Definition: approximate.cc:56
lsst::afw::math::Covariogram
The parent class of covariogram functions for use in Gaussian Process interpolation.
Definition: GaussianProcess.h:126
GaussianProcess.h
lsst::afw::math::KdTree
The data for GaussianProcess is stored in a KD tree to facilitate nearest-neighbor searches.
Definition: GaussianProcess.h:224
lsst::afw::math::GaussianProcess
Stores values of a function sampled on an image and allows you to interpolate the function to unsampl...
Definition: GaussianProcess.h:471
lsst::afw::math::SquaredExpCovariogram
SquaredExpCovariogram.
Definition: GaussianProcess.h:164
lsst::afw::math::NeuralNetCovariogram
a Covariogram that recreates a neural network with one hidden layer and infinite units in that layer
Definition: GaussianProcess.h:193
declareKdTree
void declareKdTree(py::module &mod, const std::string &suffix)
Definition: gaussianProcess.cc:36
declareCovariograms
void declareCovariograms(py::module &mod, const std::string &suffix)
Definition: gaussianProcess.cc:50
lsst::afw::math
Definition: statistics.dox:6
pybind11
Definition: _GenericMap.cc:40
lsst::utils.tests.init
def init()
Definition: tests.py:58
lsst::meas::modelfit.psf.psfContinued.module
module
Definition: psfContinued.py:42