23#include <pybind11/pybind11.h>
25#include <pybind11/stl.h>
33using namespace py::literals;
40template <
typename ImageT>
41void declareMakeBackground(lsst::utils::python::WrapperCollection &wrappers) {
42 wrappers.wrap([](
auto &mod) { mod.def(
"makeBackground", makeBackground<ImageT>,
"img"_a,
"bgCtrl"_a); });
45template <
typename PixelT,
typename PyClass>
47 cls.def((
"getImage" + suffix).c_str(),
50 Background::getImage<PixelT>,
52 cls.def((
"getImage" + suffix).c_str(),
55 Background::getImage<PixelT>,
56 "interpStyle"_a,
"undersampleStyle"_a =
"THROW_EXCEPTION");
57 cls.def((
"getImage" + suffix).c_str(),
60 Background::getImage<PixelT>,
62 cls.def((
"getImage" + suffix).c_str(),
65 Background::getImage<PixelT>,
66 "bbox"_a,
"interpStyle"_a,
"undersampleStyle"_a =
"THROW_EXCEPTION");
67 cls.def((
"getImage" + suffix).c_str(),
69 Background::getImage<PixelT>);
75 wrappers.wrapType(py::enum_<UndersampleStyle>(wrappers.module,
"UndersampleStyle"),
76 [](
auto &mod,
auto &enm) {
77 enm.value(
"THROW_EXCEPTION", UndersampleStyle::THROW_EXCEPTION);
78 enm.value(
"REDUCE_INTERP_ORDER", UndersampleStyle::REDUCE_INTERP_ORDER);
79 enm.value(
"INCREASE_NXNYSAMPLE", UndersampleStyle::INCREASE_NXNYSAMPLE);
83 using PyBackgroundControl = py::class_<BackgroundControl, std::shared_ptr<BackgroundControl>>;
84 wrappers.wrapType(PyBackgroundControl(wrappers.module,
"BackgroundControl"), [](
auto &mod,
auto &cls) {
86 cls.def(py::init<int const, int const, StatisticsControl const, Property const,
87 ApproximateControl const>(),
88 "nxSample"_a,
"nySample"_a,
"sctrl"_a = StatisticsControl(),
"prop"_a = MEANCLIP,
89 "actrl"_a = ApproximateControl(ApproximateControl::UNKNOWN, 1));
90 cls.def(py::init<int const, int const, StatisticsControl const, std::string const &,
91 ApproximateControl const>(),
92 "nxSample"_a,
"nySample"_a,
"sctrl"_a,
"prop"_a,
93 "actrl"_a = ApproximateControl(ApproximateControl::UNKNOWN, 1));
94 cls.def(py::init<Interpolate::Style const, int const, int const, UndersampleStyle const,
95 StatisticsControl const, Property const, ApproximateControl const>(),
96 "style"_a,
"nxSample"_a = 10,
"nySample"_a = 10,
"undersampleStyle"_a = THROW_EXCEPTION,
97 "sctrl"_a = StatisticsControl(),
"prop"_a = MEANCLIP,
98 "actrl"_a = ApproximateControl(ApproximateControl::UNKNOWN, 1));
99 cls.def(py::init<std::string const &, int const, int const, std::string const &,
100 StatisticsControl const, std::string const &, ApproximateControl const>(),
101 "style"_a,
"nxSample"_a = 10,
"nySample"_a = 10,
"undersampleStyle"_a =
"THROW_EXCEPTION",
102 "sctrl"_a = StatisticsControl(),
"prop"_a =
"MEANCLIP",
103 "actrl"_a = ApproximateControl(ApproximateControl::UNKNOWN, 1));
106 cls.def(
"setNxSample", &BackgroundControl::setNxSample);
107 cls.def(
"setNySample", &BackgroundControl::setNySample);
108 cls.def(
"setInterpStyle",
109 (void (BackgroundControl::*)(Interpolate::Style const)) & BackgroundControl::setInterpStyle);
110 cls.def(
"setInterpStyle",
111 (void (BackgroundControl::*)(std::string const &)) & BackgroundControl::setInterpStyle);
112 cls.def(
"setUndersampleStyle", (void (BackgroundControl::*)(UndersampleStyle const)) &
113 BackgroundControl::setUndersampleStyle);
114 cls.def(
"setUndersampleStyle",
115 (void (BackgroundControl::*)(std::string const &)) & BackgroundControl::setUndersampleStyle);
116 cls.def(
"getNxSample", &BackgroundControl::getNxSample);
117 cls.def(
"getNySample", &BackgroundControl::getNySample);
118 cls.def(
"getInterpStyle", &BackgroundControl::getInterpStyle);
119 cls.def(
"getUndersampleStyle", &BackgroundControl::getUndersampleStyle);
120 cls.def(
"getStatisticsControl", (std::shared_ptr<StatisticsControl>(BackgroundControl::*)()) &
121 BackgroundControl::getStatisticsControl);
122 cls.def(
"getStatisticsProperty", &BackgroundControl::getStatisticsProperty);
123 cls.def(
"setStatisticsProperty",
124 (void (BackgroundControl::*)(Property)) & BackgroundControl::setStatisticsProperty);
125 cls.def(
"setStatisticsProperty",
126 (void (BackgroundControl::*)(std::string)) & BackgroundControl::setStatisticsProperty);
127 cls.def(
"setApproximateControl", &BackgroundControl::setApproximateControl);
128 cls.def(
"getApproximateControl", (std::shared_ptr<ApproximateControl>(BackgroundControl::*)()) &
129 BackgroundControl::getApproximateControl);
131 using PyBackground = py::class_<Background, std::shared_ptr<Background>>;
132 wrappers.wrapType(PyBackground(wrappers.module,
"Background"), [](
auto &mod,
auto &cls) {
134 declareGetImage<float>(cls,
"F");
136 cls.def(
"getAsUsedInterpStyle", &Background::getAsUsedInterpStyle);
137 cls.def(
"getAsUsedUndersampleStyle", &Background::getAsUsedUndersampleStyle);
138 cls.def(
"getApproximate", &Background::getApproximate,
"actrl"_a,
139 "undersampleStyle"_a = THROW_EXCEPTION);
140 cls.def(
"getBackgroundControl",
141 (std::shared_ptr<BackgroundControl>(Background::*)()) & Background::getBackgroundControl);
144 using PyBackgroundMI = py::class_<BackgroundMI, std::shared_ptr<BackgroundMI>,
Background>;
145 wrappers.wrapType(PyBackgroundMI(wrappers.module,
"BackgroundMI"), [](
auto &mod,
auto &cls) {
147 cls.def(py::init<lsst::geom::Box2I const,
148 image::MaskedImage<typename Background::InternalPixelT> const &>(),
149 "imageDimensions"_a,
"statsImage"_a);
152 cls.def(
"__iadd__", &BackgroundMI::operator+=);
153 cls.def(
"__isub__", &BackgroundMI::operator-=);
156 cls.def(
"getStatsImage", &BackgroundMI::getStatsImage);
157 cls.def(
"getImageBBox", &BackgroundMI::getImageBBox);
164 wrappers.addInheritanceDependency(
"lsst.afw.image.image");
166 declareMakeBackground<image::Image<float>>(wrappers);
167 declareMakeBackground<image::MaskedImage<float>>(wrappers);
A class to represent a 2-dimensional array of pixels.
A virtual base class to evaluate image background levels.
An integer coordinate rectangle.
void wrapBackground(lsst::utils::python::WrapperCollection &wrappers)
void declareBackground(lsst::utils::python::WrapperCollection &wrappers)
UndersampleStyle stringToUndersampleStyle(std::string const &style)
Conversion function to switch a string to an UndersampleStyle.
py::class_< PixelAreaBoundedField, std::shared_ptr< PixelAreaBoundedField >, BoundedField > PyClass