lsst.shapelet  13.0-4-g5a043c4+15
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends
basisEvaluator.cc
Go to the documentation of this file.
1 /*
2  * LSST Data Management System
3  *
4  * This product includes software developed by the
5  * LSST Project (http://www.lsst.org/).
6  * See the COPYRIGHT file
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 #include "pybind11/pybind11.h"
23 
24 #include "numpy/arrayobject.h"
25 #include "ndarray/pybind11.h"
26 
28 
29 namespace py = pybind11;
30 using namespace pybind11::literals;
31 
32 namespace lsst {
33 namespace shapelet {
34 
35 PYBIND11_PLUGIN(basisEvaluator) {
36  py::module::import("lsst.afw.geom");
37 
38  py::module mod("basisEvaluator");
39 
40  if (_import_array() < 0) {
41  PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import");
42  return nullptr;
43  }
44 
45  py::class_<BasisEvaluator, std::shared_ptr<BasisEvaluator>> clsBasisEvaluator(mod, "BasisEvaluator");
46 
47  /* Constructors */
48  clsBasisEvaluator.def(py::init<int, BasisTypeEnum>(), "order"_a, "basisType"_a);
49 
50  /* Members */
51  clsBasisEvaluator.def("getOrder", &BasisEvaluator::getOrder);
52  clsBasisEvaluator.def("getBasisType", &BasisEvaluator::getBasisType);
53 
54  /* fillEvaluation has default constructed Array1d objects as keyword
55  * arguments.
56  * Unfortunately, for some reason array.isEmpty() == false even with 0
57  * elements,
58  * which leads to a segfault.
59  * Thus we must delegate through lambdas instead. */
60  clsBasisEvaluator.def("fillEvaluation", [](BasisEvaluator &self, Array1d const &array, double x,
61  double y) { return self.fillEvaluation(array, x, y); },
62  "array"_a, "x"_a, "y"_a);
63  clsBasisEvaluator.def(
64  "fillEvaluation",
65  [](BasisEvaluator &self, Array1d const &array, double x, double y, Array1d const &dx,
66  Array1d const &dy) { return self.fillEvaluation(array, x, y, dx, dy); },
67  "array"_a, "x"_a, "y"_a, "dx"_a, "dy"_a);
68  clsBasisEvaluator.def("fillEvaluation",
69  [](BasisEvaluator &self, Array1d const &array, afw::geom::Point2D const &point) {
70  return self.fillEvaluation(array, point);
71  },
72  "array"_a, "point"_a);
73  clsBasisEvaluator.def(
74  "fillEvaluation",
75  [](BasisEvaluator &self, Array1d const &array, afw::geom::Point2D const &point, Array1d const &dx,
76  Array1d const &dy) { return self.fillEvaluation(array, point, dx, dy); },
77  "array"_a, "point"_a, "dx"_a, "dy"_a);
78  clsBasisEvaluator.def("fillEvaluation",
79  [](BasisEvaluator &self, Array1d const &array, afw::geom::Extent2D const &extent) {
80  return self.fillEvaluation(array, extent);
81  },
82  "array"_a, "extent"_a);
83  clsBasisEvaluator.def(
84  "fillEvaluation",
85  [](BasisEvaluator &self, Array1d const &array, afw::geom::Extent2D const &extent,
86  Array1d const &dx, Array1d const &dy) { return self.fillEvaluation(array, extent, dx, dy); },
87  "array"_a, "extent"_a, "dx"_a, "dy"_a);
88  clsBasisEvaluator.def("fillIntegration", &BasisEvaluator::fillIntegration, "array"_a, "xMoment"_a = 0,
89  "yMoment"_a = 0);
90 
91  return mod.ptr();
92 }
93 
94 } // shapelet
95 } // lsst
Evaluates a standard shapelet Basis.
ndarray::Array< double, 1 > Array1d
Typedef for a commonly-used array type.
Definition: constants.h:121
PYBIND11_PLUGIN(basisEvaluator)