LSST Applications  21.0.0+c4f5df5339,21.0.0+e70536a077,21.0.0-1-ga51b5d4+7c60f8a6ea,21.0.0-10-gcf60f90+74aa0801fd,21.0.0-12-g63909ac9+643a1044a5,21.0.0-15-gedb9d5423+1041c3824f,21.0.0-2-g103fe59+a356b2badb,21.0.0-2-g1367e85+6d3f3f41db,21.0.0-2-g45278ab+e70536a077,21.0.0-2-g5242d73+6d3f3f41db,21.0.0-2-g7f82c8f+8d7c04eab9,21.0.0-2-g8f08a60+9c9a9cfcc8,21.0.0-2-ga326454+8d7c04eab9,21.0.0-2-gde069b7+bedfc5e1fb,21.0.0-2-gecfae73+6cb6558258,21.0.0-2-gfc62afb+6d3f3f41db,21.0.0-3-g21c7a62+f6e98b25aa,21.0.0-3-g357aad2+bd62456bea,21.0.0-3-g4be5c26+6d3f3f41db,21.0.0-3-g65f322c+03a4076c01,21.0.0-3-g7d9da8d+c4f5df5339,21.0.0-3-gaa929c8+c6b98066dc,21.0.0-3-gc44e71e+a26d5c1aea,21.0.0-3-ge02ed75+04b527a9d5,21.0.0-35-g64f566ff+b27e5ef93e,21.0.0-4-g591bb35+04b527a9d5,21.0.0-4-g88306b8+8773047b2e,21.0.0-4-gc004bbf+80a0b7acb7,21.0.0-4-gccdca77+a5c54364a0,21.0.0-4-ge8fba5a+ccfc328107,21.0.0-5-gdf36809+87b8d260e6,21.0.0-6-g00874e7+7eeda2b6ba,21.0.0-6-g2d4f3f3+e70536a077,21.0.0-6-g4e60332+04b527a9d5,21.0.0-6-g5ef7dad+f53629abd8,21.0.0-7-gc8ca178+b63e69433b,21.0.0-8-gfbe0b4b+c6b98066dc,w.2021.06
LSST Data Management Base Package
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 }
The parent class of covariogram functions for use in Gaussian Process interpolation.
Stores values of a function sampled on an image and allows you to interpolate the function to unsampl...
The data for GaussianProcess is stored in a KD tree to facilitate nearest-neighbor searches.
a Covariogram that recreates a neural network with one hidden layer and infinite units in that layer
PYBIND11_MODULE(approximate, mod)
Definition: approximate.cc:56
def init()
Definition: tests.py:59
void declareCovariograms(py::module &mod, const std::string &suffix)
void declareKdTree(py::module &mod, const std::string &suffix)
void declareGaussianProcess(py::module &mod, const std::string &suffix)