22 #include "pybind11/pybind11.h"
23 #include "pybind11/stl.h"
25 #include "numpy/arrayobject.h"
26 #include "ndarray/pybind11.h"
30 namespace py = pybind11;
31 using namespace pybind11::literals;
38 template <
typename PyClass>
39 void declareMultiShapeletFunctionMembers(PyClass &cls) {
40 using Class = MultiShapeletFunction;
42 cls.def(py::init<>());
43 cls.def(py::init<Class const &>());
44 cls.def(py::init<typename Class::ComponentList const &>());
45 cls.def(py::init<ShapeletFunction const &>());
47 cls.def(
"getComponents", [](Class
const &
self) {
48 auto &components =
self.getComponents();
50 py::tuple t(components.size());
51 for (
size_t i = 0; i < components.size(); ++i) {
52 t[i] = py::cast(components[i]);
57 cls.def(
"addComponent",
58 [](Class &
self,
typename Class::Component
const &c) {
self.getComponents().push_back(c); });
59 cls.def(
"normalize", &Class::normalize,
"value"_a = 1.0);
60 cls.def(
"shiftInPlace", &Class::shiftInPlace);
61 cls.def(
"transformInPlace", &Class::transformInPlace);
62 cls.def(
"convolve", (Class (Class::*)(ShapeletFunction
const &)
const) & Class::convolve);
63 cls.def(
"convolve", (Class (Class::*)(Class
const &)
const) & Class::convolve);
64 cls.def(
"evaluate", &Class::evaluate);
67 template <
typename PyClass>
68 void declareMultiShapeletFunctionEvaluatorMembers(PyClass &cls) {
69 using Class = MultiShapeletFunctionEvaluator;
71 cls.def(py::init<MultiShapeletFunction const &>());
73 cls.def(
"__call__", (
double (Class::*)(
double,
double)
const) & Class::operator());
74 cls.def(
"__call__", (
double (Class::*)(afw::geom::Point2D
const &)
const) & Class::operator());
75 cls.def(
"__call__", (
double (Class::*)(afw::geom::Extent2D
const &)
const) & Class::operator());
77 (ndarray::Array<double, 1, 1> (Class::*)(ndarray::Array<double const, 1>
const &,
78 ndarray::Array<double const, 1>
const &)
const) &
82 (
void (Class::*)(ndarray::Array<double, 2, 1>
const &, afw::geom::Point2I
const &)
const) &
84 "array"_a,
"xy0"_a = afw::geom::Point2I());
85 cls.def(
"addToImage", (
void (Class::*)(afw::image::Image<double> &)
const) & Class::addToImage,
88 cls.def(
"integrate", &Class::integrate);
89 cls.def(
"computeMoments", &Class::computeMoments);
90 cls.def(
"update", &Class::update);
96 py::module::import(
"lsst.afw.geom");
97 py::module::import(
"lsst.afw.image");
99 py::module mod(
"multiShapeletFunction");
101 if (_import_array() < 0) {
102 PyErr_SetString(PyExc_ImportError,
"numpy.core.multiarray failed to import");
106 py::class_<MultiShapeletFunction, std::shared_ptr<MultiShapeletFunction>> clsMultiShapeletFunction(
107 mod,
"MultiShapeletFunction");
108 py::class_<MultiShapeletFunctionEvaluator, std::shared_ptr<MultiShapeletFunctionEvaluator>>
109 clsMultiShapeletFunctionEvaluator(mod,
"MultiShapeletFunctionEvaluator");
111 declareMultiShapeletFunctionMembers(clsMultiShapeletFunction);
112 declareMultiShapeletFunctionEvaluatorMembers(clsMultiShapeletFunctionEvaluator);
PYBIND11_PLUGIN(basisEvaluator)