23 #include <pybind11/pybind11.h> 
   26 #include <pybind11/stl.h> 
   33 using namespace py::literals;
 
   39 void 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)
A base class for image defects.