23#include <pybind11/pybind11.h>
26#include <pybind11/stl.h>
33using namespace py::literals;
39void wrapKernel(lsst::utils::python::WrapperCollection &wrappers) {
40 using PyKernel = py::class_<Kernel, std::shared_ptr<Kernel>>;
42 wrappers.addSignatureDependency(
"lsst.afw.table");
43 wrappers.addSignatureDependency(
"lsst.afw.table.io");
45 wrappers.wrapType(PyKernel(wrappers.module,
"Kernel"), [](
auto &mod,
auto &cls) {
46 lsst::afw::table::io::python::addPersistableMethods<Kernel>(cls);
48 cls.def(
"clone", &Kernel::clone);
49 cls.def(
"resized", &Kernel::resized,
"width"_a,
"height"_a);
50 cls.def(
"computeImage", &Kernel::computeImage,
"image"_a,
"doNormalize"_a,
"x"_a = 0.0,
"y"_a = 0.0);
51 cls.def(
"getDimensions", &Kernel::getDimensions);
52 cls.def(
"setDimensions", &Kernel::setDimensions);
53 cls.def(
"setWidth", &Kernel::setWidth);
54 cls.def(
"setHeight", &Kernel::setHeight);
55 cls.def(
"getWidth", &Kernel::getWidth);
56 cls.def(
"getHeight", &Kernel::getHeight);
57 cls.def(
"getCtr", &Kernel::getCtr);
58 cls.def(
"getBBox", &Kernel::getBBox);
59 cls.def(
"getNKernelParameters", &Kernel::getNKernelParameters);
60 cls.def(
"getNSpatialParameters", &Kernel::getNSpatialParameters);
61 cls.def(
"getSpatialFunction", &Kernel::getSpatialFunction);
62 cls.def(
"getSpatialFunctionList", &Kernel::getSpatialFunctionList);
63 cls.def(
"getKernelParameter", &Kernel::getKernelParameter);
64 cls.def(
"getKernelParameters", &Kernel::getKernelParameters);
65 cls.def(
"growBBox", &Kernel::growBBox);
66 cls.def(
"shrinkBBox", &Kernel::shrinkBBox);
67 cls.def(
"setCtr", &Kernel::setCtr);
68 cls.def(
"getSpatialParameters", &Kernel::getSpatialParameters);
69 cls.def(
"isSpatiallyVarying", &Kernel::isSpatiallyVarying);
70 cls.def(
"setKernelParameters",
71 (void (Kernel::*)(std::vector<double> const &)) & Kernel::setKernelParameters);
72 cls.def(
"setKernelParameters",
73 (void (Kernel::*)(std::pair<double, double> const &)) & Kernel::setKernelParameters);
74 cls.def(
"setSpatialParameters", &Kernel::setSpatialParameters);
75 cls.def(
"computeKernelParametersFromSpatialModel", &Kernel::computeKernelParametersFromSpatialModel);
76 cls.def(
"toString", &Kernel::toString,
"prefix"_a =
"");
77 cls.def(
"computeCache", &Kernel::computeCache);
78 cls.def(
"getCacheSize", &Kernel::getCacheSize);
81 using PyFixedKernel = py::class_<FixedKernel, std::shared_ptr<FixedKernel>,
Kernel>;
82 wrappers.wrapType(PyFixedKernel(wrappers.module,
"FixedKernel"), [](
auto &mod,
auto &cls) {
83 cls.def(py::init<>());
84 cls.def(py::init<lsst::afw::image::Image<Kernel::Pixel> const &>(),
"image"_a);
85 cls.def(py::init<lsst::afw::math::Kernel const &, lsst::geom::Point2D const &>(),
"kernel"_a,
87 cls.def(
"clone", &FixedKernel::clone);
88 cls.def(
"resized", &FixedKernel::resized,
"width"_a,
"height"_a);
89 cls.def(
"toString", &FixedKernel::toString,
"prefix"_a =
"");
90 cls.def(
"getSum", &FixedKernel::getSum);
91 cls.def(
"isPersistable", &FixedKernel::isPersistable);
94 using PyAnalyticKernel = py::class_<AnalyticKernel, std::shared_ptr<AnalyticKernel>,
Kernel>;
95 wrappers.wrapType(PyAnalyticKernel(wrappers.module,
"AnalyticKernel"), [](
auto &mod,
auto &cls) {
96 cls.def(py::init<>());
99 cls.def(py::init<int, int, AnalyticKernel::KernelFunction const &>(),
"width"_a,
"height"_a,
101 cls.def(py::init<int, int, AnalyticKernel::KernelFunction const &, Kernel::SpatialFunction const &>(),
102 "width"_a,
"height"_a,
"kernelFunction"_a,
"spatialFunction"_a);
103 cls.def(py::init<int, int, AnalyticKernel::KernelFunction const &,
104 std::vector<Kernel::SpatialFunctionPtr> const &>(),
105 "width"_a,
"height"_a,
"kernelFunction"_a,
"spatialFunctionList"_a);
106 cls.def(
"clone", &AnalyticKernel::clone);
107 cls.def(
"resized", &AnalyticKernel::resized,
"width"_a,
"height"_a);
108 cls.def(
"computeImage", &AnalyticKernel::computeImage,
"image"_a,
"doNormalize"_a,
"x"_a = 0.0,
110 cls.def(
"getKernelParameters", &AnalyticKernel::getKernelParameters);
111 cls.def(
"getKernelFunction", &AnalyticKernel::getKernelFunction);
112 cls.def(
"toString", &AnalyticKernel::toString,
"prefix"_a =
"");
113 cls.def(
"isPersistable", &AnalyticKernel::isPersistable);
116 using PyDeltaFunctionKernel =
117 py::class_<DeltaFunctionKernel, std::shared_ptr<DeltaFunctionKernel>,
Kernel>;
119 PyDeltaFunctionKernel(wrappers.module,
"DeltaFunctionKernel"), [](
auto &mod,
auto &cls) {
120 cls.def(py::init<int, int, lsst::geom::Point2I const &>(),
"width"_a,
"height"_a,
"point"_a);
121 cls.def(
"clone", &DeltaFunctionKernel::clone);
122 cls.def(
"resized", &DeltaFunctionKernel::resized,
"width"_a,
"height"_a);
123 cls.def(
"getPixel", &DeltaFunctionKernel::getPixel);
124 cls.def(
"toString", &DeltaFunctionKernel::toString,
"prefix"_a =
"");
125 cls.def(
"isPersistable", &DeltaFunctionKernel::isPersistable);
128 using PyLinearCombinationKernel =
129 py::class_<LinearCombinationKernel, std::shared_ptr<LinearCombinationKernel>,
Kernel>;
131 PyLinearCombinationKernel(wrappers.module,
"LinearCombinationKernel"), [](
auto &mod,
auto &cls) {
132 cls.def(py::init<>());
133 cls.def(py::init<KernelList const &, std::vector<double> const &>(),
"kernelList"_a,
134 "kernelParameters"_a);
135 cls.def(py::init<KernelList const &, Kernel::SpatialFunction const &>(),
"kernelList"_a,
136 "spatialFunction"_a);
137 cls.def(py::init<KernelList const &, std::vector<Kernel::SpatialFunctionPtr> const &>(),
138 "kernelList"_a,
"spatialFunctionList"_a);
139 cls.def(
"clone", &LinearCombinationKernel::clone);
140 cls.def(
"resized", &LinearCombinationKernel::resized,
"width"_a,
"height"_a);
141 cls.def(
"getKernelParameters", &LinearCombinationKernel::getKernelParameters);
142 cls.def(
"getKernelList", &LinearCombinationKernel::getKernelList);
143 cls.def(
"getKernelSumList", &LinearCombinationKernel::getKernelSumList);
144 cls.def(
"getNBasisKernels", &LinearCombinationKernel::getNBasisKernels);
145 cls.def(
"checkKernelList", &LinearCombinationKernel::checkKernelList);
146 cls.def(
"isDeltaFunctionBasis", &LinearCombinationKernel::isDeltaFunctionBasis);
147 cls.def(
"refactor", &LinearCombinationKernel::refactor);
148 cls.def(
"toString", &LinearCombinationKernel::toString,
"prefix"_a =
"");
149 cls.def(
"isPersistable", &LinearCombinationKernel::isPersistable);
152 using PySeparableKernel = py::class_<SeparableKernel, std::shared_ptr<SeparableKernel>,
Kernel>;
153 wrappers.wrapType(PySeparableKernel(wrappers.module,
"SeparableKernel"), [](
auto &mod,
auto &cls) {
154 cls.def(py::init<>());
157 cls.def(py::init<int, int, SeparableKernel::KernelFunction const &,
158 SeparableKernel::KernelFunction const &>(),
159 "width"_a,
"height"_a,
"kernelColFunction"_a,
"kernelRowFunction"_a);
160 cls.def(py::init<int, int, SeparableKernel::KernelFunction const &,
161 SeparableKernel::KernelFunction const &, Kernel::SpatialFunction const &>(),
162 "width"_a,
"height"_a,
"kernelColFunction"_a,
"kernelRowFunction"_a,
"spatialFunction"_a);
163 cls.def(py::init<int, int, SeparableKernel::KernelFunction const &,
164 SeparableKernel::KernelFunction const &,
165 std::vector<Kernel::SpatialFunctionPtr> const &>(),
166 "width"_a,
"height"_a,
"kernelColFunction"_a,
"kernelRowFunction"_a,
"spatialFunctionList"_a);
167 cls.def(
"clone", &SeparableKernel::clone);
168 cls.def(
"resized", &SeparableKernel::resized,
"width"_a,
"height"_a);
169 cls.def(
"computeVectors", &SeparableKernel::computeVectors);
170 cls.def(
"getKernelParameter", &SeparableKernel::getKernelParameter);
171 cls.def(
"getKernelParameters", &SeparableKernel::getKernelParameters);
172 cls.def(
"getKernelColFunction", &SeparableKernel::getKernelColFunction);
173 cls.def(
"getKernelRowFunction", &SeparableKernel::getKernelRowFunction);
174 cls.def(
"toString", &SeparableKernel::toString,
"prefix"_a =
"");
175 cls.def(
"computeCache", &SeparableKernel::computeCache);
176 cls.def(
"getCacheSize", &SeparableKernel::getCacheSize);
Kernels are used for convolution with MaskedImages and (eventually) Images.
void wrapKernel(lsst::utils::python::WrapperCollection &wrappers)