48 {
49 wrappers.addInheritanceDependency("lsst.afw.typehandling");
50 wrappers.addSignatureDependency("lsst.afw.geom.ellipses");
51 wrappers.addSignatureDependency("lsst.afw.image");
52 wrappers.addSignatureDependency("lsst.afw.fits");
53
54 auto clsPsf = wrappers.wrapType(
56 wrappers.module, "Psf"
57 ),
58 [](auto& mod, auto& cls) {
59 table::io::python::addPersistableMethods<Psf>(cls);
60 cls.def(py::init<bool, size_t>(), "isFixed"_a=false, "capacity"_a=100);
61 cls.def("clone", &Psf::clone);
62 cls.def("resized", &Psf::resized, "width"_a, "height"_a);
63
64
65
66 cls.def("computeImage",
67 py::overload_cast<lsst::geom::Point2D, image::Color, Psf::ImageOwnerEnum>(&Psf::computeImage, py::const_),
68 "position"_a,
69 "color"_a = image::Color(),
70 "owner"_a = Psf::ImageOwnerEnum::COPY
71 );
72 cls.def("computeKernelImage",
73 py::overload_cast<lsst::geom::Point2D, image::Color, Psf::ImageOwnerEnum>(&Psf::computeKernelImage, py::const_),
74 "position"_a,
75 "color"_a = image::Color(),
76 "owner"_a = Psf::ImageOwnerEnum::COPY
77 );
78 cls.def("computePeak",
79 py::overload_cast<lsst::geom::Point2D, image::Color>(&Psf::computePeak, py::const_),
80 "position"_a,
81 "color"_a = image::Color()
82 );
83 cls.def("computeApertureFlux",
84 py::overload_cast<double, lsst::geom::Point2D, image::Color>(&Psf::computeApertureFlux, py::const_),
85 "radius"_a,
86 "position"_a,
87 "color"_a = image::Color()
88 );
89 cls.def("computeShape",
90 py::overload_cast<lsst::geom::Point2D, image::Color>(&Psf::computeShape, py::const_),
91 "position"_a,
92 "color"_a = image::Color()
93 );
94 cls.def("computeBBox",
95 py::overload_cast<lsst::geom::Point2D, image::Color>(&Psf::computeBBox, py::const_),
96 "position"_a,
97 "color"_a = image::Color()
98 );
99 cls.def("computeImageBBox",
100 py::overload_cast<lsst::geom::Point2D, image::Color>(&Psf::computeImageBBox, py::const_),
101 "position"_a,
102 "color"_a = image::Color()
103 );
104 cls.def("computeKernelBBox",
105 py::overload_cast<lsst::geom::Point2D, image::Color>(&Psf::computeKernelBBox, py::const_),
106 "position"_a,
107 "color"_a = image::Color()
108 );
109 cls.def("getLocalKernel",
110 py::overload_cast<lsst::geom::Point2D, image::Color>(&Psf::getLocalKernel, py::const_),
111 "position"_a,
112 "color"_a = image::Color()
113 );
114
115
116 cls.def("computeImage",
117 [](const Psf& psf) {
118 py::gil_scoped_acquire gil;
119 auto warnings = py::module::import("warnings");
120 auto FutureWarning = py::handle(PyEval_GetBuiltins())["FutureWarning"];
121 warnings.attr("warn")(
122 "Default position argument overload is deprecated and will be "
123 "removed in version 24.0. Please explicitly specify a position.",
124 "category"_a=FutureWarning
125 );
126 return psf.computeImage();
127 }
128 );
129 cls.def("computeKernelImage",
131 py::gil_scoped_acquire gil;
132 auto warnings = py::module::import("warnings");
133 auto FutureWarning = py::handle(PyEval_GetBuiltins())["FutureWarning"];
134 warnings.attr("warn")(
135 "Default position argument overload is deprecated and will be "
136 "removed in version 24.0. Please explicitly specify a position.",
137 "category"_a=FutureWarning
138 );
139 return psf.computeKernelImage();
140 }
141 );
142 cls.def("computePeak",
143 [](const Psf& psf) {
144 py::gil_scoped_acquire gil;
145 auto warnings = py::module::import("warnings");
146 auto FutureWarning = py::handle(PyEval_GetBuiltins())["FutureWarning"];
147 warnings.attr("warn")(
148 "Default position argument overload is deprecated and will be "
149 "removed in version 24.0. Please explicitly specify a position.",
150 "category"_a=FutureWarning
151 );
152 return psf.computePeak();
153 }
154 );
155 cls.def("computeApertureFlux",
156 [](const Psf& psf, double radius) {
157 py::gil_scoped_acquire gil;
158 auto warnings = py::module::import("warnings");
159 auto FutureWarning = py::handle(PyEval_GetBuiltins())["FutureWarning"];
160 warnings.attr("warn")(
161 "Default position argument overload is deprecated and will be "
162 "removed in version 24.0. Please explicitly specify a position.",
163 "category"_a=FutureWarning
164 );
165 return psf.computeApertureFlux(radius);
166 },
167 "radius"_a
168 );
169 cls.def("computeShape",
170 [](const Psf& psf) {
171 py::gil_scoped_acquire gil;
172 auto warnings = py::module::import("warnings");
173 auto FutureWarning = py::handle(PyEval_GetBuiltins())["FutureWarning"];
174 warnings.attr("warn")(
175 "Default position argument overload is deprecated and will be "
176 "removed in version 24.0. Please explicitly specify a position.",
177 "category"_a=FutureWarning
178 );
179 return psf.computeShape();
180 }
181 );
182 cls.def(
"computeBBox",
183 [](const Psf& psf) {
184 py::gil_scoped_acquire gil;
185 auto warnings = py::module::import("warnings");
186 auto FutureWarning = py::handle(PyEval_GetBuiltins())["FutureWarning"];
187 warnings.attr("warn")(
188 "Default position argument overload is deprecated and will be "
189 "removed in version 24.0. Please explicitly specify a position.",
190 "category"_a=FutureWarning
191 );
192 return psf.computeBBox();
193 }
194 );
195 cls.def(
"computeImageBBox",
196 [](const Psf& psf) {
197 py::gil_scoped_acquire gil;
198 auto warnings = py::module::import("warnings");
199 auto FutureWarning = py::handle(PyEval_GetBuiltins())["FutureWarning"];
200 warnings.attr("warn")(
201 "Default position argument overload is deprecated and will be "
202 "removed in version 24.0. Please explicitly specify a position.",
203 "category"_a=FutureWarning
204 );
205 return psf.computeImageBBox();
206 }
207 );
208 cls.def(
"computeKernelBBox",
209 [](const Psf& psf) {
210 py::gil_scoped_acquire gil;
211 auto warnings = py::module::import("warnings");
212 auto FutureWarning = py::handle(PyEval_GetBuiltins())["FutureWarning"];
213 warnings.attr("warn")(
214 "Default position argument overload is deprecated and will be "
215 "removed in version 24.0. Please explicitly specify a position.",
216 "category"_a=FutureWarning
217 );
218 return psf.computeKernelBBox();
219 }
220 );
221 cls.def(
"getLocalKernel",
222 [](const Psf& psf) {
223 py::gil_scoped_acquire gil;
224 auto warnings = py::module::import("warnings");
225 auto FutureWarning = py::handle(PyEval_GetBuiltins())["FutureWarning"];
226 warnings.attr("warn")(
227 "Default position argument overload is deprecated and will be "
228 "removed in version 24.0. Please explicitly specify a position.",
229 "category"_a=FutureWarning
230 );
231 return psf.getLocalKernel();
232 }
233 );
234
235
236 cls.def(
"getAverageColor", &Psf::getAverageColor);
237 cls.def(
"getAveragePosition", &Psf::getAveragePosition);
238 cls.def_static(
"recenterKernelImage", &Psf::recenterKernelImage,
"im"_a,
"position"_a,
239 "warpAlgorithm"_a = "lanczos5", "warpBuffer"_a = 5);
240 cls.def(
"getCacheCapacity", &Psf::getCacheCapacity);
241 cls.def(
"setCacheCapacity", &Psf::setCacheCapacity);
242 }
243 );
244
245 wrappers.wrapType(py::enum_<Psf::ImageOwnerEnum>(clsPsf, "ImageOwnerEnum"), [](auto& mod, auto& enm) {
246 enm.value("COPY", Psf::ImageOwnerEnum::COPY);
247 enm.value("INTERNAL", Psf::ImageOwnerEnum::INTERNAL);
248 enm.export_values();
249 });
250}
"Trampoline" for Psf to let it be used as a base class in Python.
Interface supporting iteration over heterogenous containers.