24 #include "pybind11/pybind11.h" 
   25 #include "pybind11/stl.h" 
   27 #include "ndarray/pybind11.h" 
   36 using namespace pybind11::literals;
 
   44 template <
typename PixelT>
 
   47 template <
typename PixelT>
 
   50 template <
typename PixelT>
 
   53 template <
typename MaskPixelT>
 
   64 template <
typename FromPixelT, 
typename ToPixelT>
 
   65 static void declareCastConstructor(PyImage<ToPixelT> &cls) {
 
   66     cls.def(py::init<Image<FromPixelT> 
const &, 
bool const>(), 
"src"_a, 
"deep"_a);
 
   69 template <
typename PixelT>
 
   70 static void declareImageBase(lsst::utils::python::WrapperCollection &wrappers, 
std::string const &suffix) {
 
   71     using Array = 
typename ImageBase<PixelT>::Array;
 
   72     wrappers.wrapType(PyImageBase<PixelT>(wrappers.module, (
"ImageBase" + suffix).c_str()), [](
auto &mod,
 
   74         cls.def(py::init<lsst::geom::Extent2I const &>(), 
"dimensions"_a = lsst::geom::Extent2I());
 
   75         cls.def(py::init<ImageBase<PixelT> const &, bool>(), 
"src"_a, 
"deep"_a = false);
 
   76         cls.def(py::init<ImageBase<PixelT> const &, lsst::geom::Box2I const &, ImageOrigin, bool>(), 
"src"_a,
 
   77                 "bbox"_a, 
"origin"_a = PARENT, 
"deep"_a = false);
 
   78         cls.def(py::init<Array const &, bool, lsst::geom::Point2I const &>(), 
"array"_a, 
"deep"_a = false,
 
   79                 "xy0"_a = lsst::geom::Point2I());
 
   81         cls.def(
"assign", &ImageBase<PixelT>::assign, 
"rhs"_a, 
"bbox"_a = lsst::geom::Box2I(),
 
   85         cls.def(
"getWidth", &ImageBase<PixelT>::getWidth);
 
   86         cls.def(
"getHeight", &ImageBase<PixelT>::getHeight);
 
   87         cls.def(
"getX0", &ImageBase<PixelT>::getX0);
 
   88         cls.def(
"getY0", &ImageBase<PixelT>::getY0);
 
   89         cls.def(
"getXY0", &ImageBase<PixelT>::getXY0);
 
   90         cls.def(
"positionToIndex", &ImageBase<PixelT>::positionToIndex, 
"position"_a, 
"xOrY"_a);
 
   91         cls.def(
"indexToPosition", &ImageBase<PixelT>::indexToPosition, 
"index"_a, 
"xOrY"_a);
 
   92         cls.def(
"getDimensions", &ImageBase<PixelT>::getDimensions);
 
   93         cls.def(
"getArray", (Array(ImageBase<PixelT>::*)()) & ImageBase<PixelT>::getArray);
 
   94         cls.def_property(
"array", (Array(ImageBase<PixelT>::*)()) & ImageBase<PixelT>::getArray,
 
   95                          [](ImageBase<PixelT> &self, ndarray::Array<PixelT const, 2, 0> const &array) {
 
   98                              if (array.shallow() != self.getArray().shallow()) {
 
   99                                  self.getArray().deep() = array;
 
  105         cls.def(
"setXY0", (
void (ImageBase<PixelT>::*)(
int const, 
int const)) & ImageBase<PixelT>::setXY0,
 
  107         cls.def(
"getBBox", &ImageBase<PixelT>::getBBox, 
"origin"_a = 
PARENT);
 
  109         cls.def(
"set", [](ImageBase<PixelT> &img, 
PixelT val) { img = 
val; });
 
  114                     img.get(index, origin) = 
val;
 
  116                 "index"_a, 
"value"_a, 
"origin"_a);
 
  121                     return img.get(index, origin);
 
  123                 "index"_a, 
"origin"_a);
 
  127 template <
typename MaskPixelT>
 
  128 static void declareMask(lsst::utils::python::WrapperCollection &wrappers, 
std::string const &suffix) {
 
  129     wrappers.wrapType(PyMask<MaskPixelT>(wrappers.module, (
"Mask" + suffix).c_str()), [](
auto &mod,
 
  132         cls.def(py::init<unsigned int, unsigned int, typename Mask<MaskPixelT>::MaskPlaneDict const &>(),
 
  133                 "width"_a, 
"height"_a, 
"planeDefs"_a = typename Mask<MaskPixelT>::MaskPlaneDict());
 
  134         cls.def(py::init<unsigned int, unsigned int, MaskPixelT,
 
  135                          typename Mask<MaskPixelT>::MaskPlaneDict const &>(),
 
  136                 "width"_a, 
"height"_a, 
"initialValue"_a,
 
  137                 "planeDefs"_a = typename Mask<MaskPixelT>::MaskPlaneDict());
 
  138         cls.def(py::init<lsst::geom::Extent2I const &, typename Mask<MaskPixelT>::MaskPlaneDict const &>(),
 
  139                 "dimensions"_a = lsst::geom::Extent2I(),
 
  140                 "planeDefs"_a = typename Mask<MaskPixelT>::MaskPlaneDict());
 
  141         cls.def(py::init<lsst::geom::Extent2I const &, MaskPixelT,
 
  142                          typename Mask<MaskPixelT>::MaskPlaneDict const &>(),
 
  143                 "dimensions"_a = lsst::geom::Extent2I(), 
"initialValue"_a,
 
  144                 "planeDefs"_a = typename Mask<MaskPixelT>::MaskPlaneDict());
 
  145         cls.def(py::init<lsst::geom::Box2I const &, typename Mask<MaskPixelT>::MaskPlaneDict const &>(),
 
  146                 "bbox"_a, 
"planeDefs"_a = typename Mask<MaskPixelT>::MaskPlaneDict());
 
  147         cls.def(py::init<lsst::geom::Box2I const &, MaskPixelT,
 
  148                          typename Mask<MaskPixelT>::MaskPlaneDict const &>(),
 
  149                 "bbox"_a, 
"initialValue"_a, 
"planeDefs"_a = typename Mask<MaskPixelT>::MaskPlaneDict());
 
  150         cls.def(py::init<const Mask<MaskPixelT> &, const bool>(), 
"src"_a, 
"deep"_a = false);
 
  151         cls.def(py::init<const Mask<MaskPixelT> &, const lsst::geom::Box2I &, ImageOrigin const,
 
  153                 "src"_a, 
"bbox"_a, 
"origin"_a = PARENT, 
"deep"_a = false);
 
  154         cls.def(py::init<ndarray::Array<MaskPixelT, 2, 1> const &, bool, lsst::geom::Point2I const &>(),
 
  155                 "array"_a, 
"deep"_a = false, 
"xy0"_a = lsst::geom::Point2I());
 
  156         cls.def(py::init<std::string const &, int, std::shared_ptr<lsst::daf::base::PropertySet>,
 
  157                          lsst::geom::Box2I const &, ImageOrigin, bool, bool>(),
 
  158                 "fileName"_a, 
"hdu"_a = fits::DEFAULT_HDU, 
"metadata"_a = nullptr,
 
  159                 "bbox"_a = lsst::geom::Box2I(), 
"origin"_a = PARENT, 
"conformMasks"_a = false,
 
  160                 "allowUnsafe"_a = false);
 
  161         cls.def(py::init<fits::MemFileManager &, int, std::shared_ptr<lsst::daf::base::PropertySet>,
 
  162                          lsst::geom::Box2I const &, ImageOrigin, bool, bool>(),
 
  163                 "manager"_a, 
"hdu"_a = fits::DEFAULT_HDU, 
"metadata"_a = nullptr,
 
  164                 "bbox"_a = lsst::geom::Box2I(), 
"origin"_a = PARENT, 
"conformMasks"_a = false,
 
  165                 "allowUnsafe"_a = false);
 
  166         cls.def(py::init<fits::Fits &, std::shared_ptr<lsst::daf::base::PropertySet>,
 
  167                          lsst::geom::Box2I const &, ImageOrigin, bool, bool>(),
 
  168                 "fitsFile"_a, 
"metadata"_a = nullptr, 
"bbox"_a = lsst::geom::Box2I(), 
"origin"_a = PARENT,
 
  169                 "conformMasks"_a = false, 
"allowUnsafe"_a = false);
 
  172         cls.def(
"__ior__", [](Mask<MaskPixelT> &self, Mask<MaskPixelT> &other) { return self |= other; });
 
  173         cls.def(
"__ior__", [](Mask<MaskPixelT> &
self, MaskPixelT 
const other) { 
return self |= other; });
 
  174         cls.def(
"__ior__", [](Mask<MaskPixelT> &
self, 
int other) { 
return self |= other; });
 
  175         cls.def(
"__iand__", [](Mask<MaskPixelT> &
self, Mask<MaskPixelT> &other) { 
return self &= other; });
 
  176         cls.def(
"__iand__", [](Mask<MaskPixelT> &
self, MaskPixelT 
const other) { 
return self &= other; });
 
  177         cls.def(
"__iand__", [](Mask<MaskPixelT> &
self, 
int other) { 
return self &= other; });
 
  178         cls.def(
"__ixor__", [](Mask<MaskPixelT> &
self, Mask<MaskPixelT> &other) { 
return self ^= other; });
 
  179         cls.def(
"__ixor__", [](Mask<MaskPixelT> &
self, MaskPixelT 
const other) { 
return self ^= other; });
 
  180         cls.def(
"__ixor__", [](Mask<MaskPixelT> &
self, 
int other) { 
return self ^= other; });
 
  191                 (
void (Mask<MaskPixelT>::*)(fits::MemFileManager &,
 
  202                 (
void (Mask<MaskPixelT>::*)(
std::string const &, fits::ImageWriteOptions 
const &,
 
  206                 "filename"_a, 
"options"_a, 
"mode"_a = 
"w",
 
  209                 (
void (Mask<MaskPixelT>::*)(fits::MemFileManager &, fits::ImageWriteOptions 
const &,
 
  213                 "manager"_a, 
"options"_a, 
"mode"_a = 
"w",
 
  216                 (
void (Mask<MaskPixelT>::*)(fits::Fits &, fits::ImageWriteOptions 
const &,
 
  220         cls.def_static(
"readFits", (Mask<MaskPixelT>(*)(
std::string const &, 
int))Mask<MaskPixelT>::readFits,
 
  222         cls.def_static(
"readFits",
 
  223                        (Mask<MaskPixelT>(*)(fits::MemFileManager &, 
int))Mask<MaskPixelT>::readFits,
 
  225         cls.def_static(
"interpret", Mask<MaskPixelT>::interpret);
 
  226         cls.def(
"subset", &Mask<MaskPixelT>::subset, 
"bbox"_a, 
"origin"_a = 
PARENT);
 
  227         cls.def(
"getAsString", &Mask<MaskPixelT>::getAsString);
 
  228         cls.def(
"clearAllMaskPlanes", &Mask<MaskPixelT>::clearAllMaskPlanes);
 
  229         cls.def(
"clearMaskPlane", &Mask<MaskPixelT>::clearMaskPlane);
 
  230         cls.def(
"setMaskPlaneValues", &Mask<MaskPixelT>::setMaskPlaneValues);
 
  231         cls.def_static(
"parseMaskPlaneMetadata", Mask<MaskPixelT>::parseMaskPlaneMetadata);
 
  232         cls.def_static(
"clearMaskPlaneDict", Mask<MaskPixelT>::clearMaskPlaneDict);
 
  233         cls.def_static(
"removeMaskPlane", Mask<MaskPixelT>::removeMaskPlane);
 
  234         cls.def(
"removeAndClearMaskPlane", &Mask<MaskPixelT>::removeAndClearMaskPlane, 
"name"_a,
 
  235                 "removeFromDefault"_a = 
false);
 
  236         cls.def_static(
"getMaskPlane", Mask<MaskPixelT>::getMaskPlane);
 
  237         cls.def_static(
"getPlaneBitMask",
 
  238                        (MaskPixelT(*)(
const std::string &))Mask<MaskPixelT>::getPlaneBitMask);
 
  239         cls.def_static(
"getPlaneBitMask",
 
  241         cls.def_static(
"getNumPlanesMax", Mask<MaskPixelT>::getNumPlanesMax);
 
  242         cls.def_static(
"getNumPlanesUsed", Mask<MaskPixelT>::getNumPlanesUsed);
 
  243         cls.def(
"getMaskPlaneDict", &Mask<MaskPixelT>::getMaskPlaneDict);
 
  244         cls.def(
"printMaskPlanes", &Mask<MaskPixelT>::printMaskPlanes);
 
  245         cls.def_static(
"addMaskPlanesToMetadata", Mask<MaskPixelT>::addMaskPlanesToMetadata);
 
  246         cls.def(
"conformMaskPlanes", &Mask<MaskPixelT>::conformMaskPlanes);
 
  247         cls.def_static(
"addMaskPlane", (
int (*)(
const std::string &))Mask<MaskPixelT>::addMaskPlane);
 
  251 template <
typename PixelT>
 
  252 static PyImage<PixelT> declareImage(lsst::utils::python::WrapperCollection &wrappers,
 
  254     return wrappers.wrapType(PyImage<PixelT>(wrappers.module, (
"Image" + suffix).c_str()), [](
auto &mod,
 
  257         cls.def(py::init<unsigned int, unsigned int, PixelT>(), 
"width"_a, 
"height"_a, 
"intialValue"_a = 0);
 
  258         cls.def(py::init<lsst::geom::Extent2I const &, PixelT>(), 
"dimensions"_a = lsst::geom::Extent2I(),
 
  259                 "initialValue"_a = 0);
 
  260         cls.def(py::init<lsst::geom::Box2I const &, PixelT>(), 
"bbox"_a, 
"initialValue"_a = 0);
 
  261         cls.def(py::init<Image<PixelT> const &, lsst::geom::Box2I const &, ImageOrigin const, const bool>(),
 
  262                 "rhs"_a, 
"bbox"_a, 
"origin"_a = PARENT, 
"deep"_a = false);
 
  263         cls.def(py::init<ndarray::Array<PixelT, 2, 1> const &, bool, lsst::geom::Point2I const &>(),
 
  264                 "array"_a, 
"deep"_a = false, 
"xy0"_a = lsst::geom::Point2I());
 
  265         cls.def(py::init<std::string const &, int, std::shared_ptr<daf::base::PropertySet>,
 
  266                          lsst::geom::Box2I const &, ImageOrigin, bool>(),
 
  267                 "fileName"_a, 
"hdu"_a = fits::DEFAULT_HDU, 
"metadata"_a = nullptr,
 
  268                 "bbox"_a = lsst::geom::Box2I(), 
"origin"_a = PARENT, 
"allowUnsafe"_a = false);
 
  269         cls.def(py::init<fits::MemFileManager &, int, std::shared_ptr<daf::base::PropertySet>,
 
  270                          lsst::geom::Box2I const &, ImageOrigin, bool>(),
 
  271                 "manager"_a, 
"hdu"_a = fits::DEFAULT_HDU, 
"metadata"_a = nullptr,
 
  272                 "bbox"_a = lsst::geom::Box2I(), 
"origin"_a = PARENT, 
"allowUnsafe"_a = false);
 
  273         cls.def(py::init<fits::Fits &, std::shared_ptr<daf::base::PropertySet>, lsst::geom::Box2I const &,
 
  274                          ImageOrigin, bool>(),
 
  275                 "fitsFile"_a, 
"metadata"_a = nullptr, 
"bbox"_a = lsst::geom::Box2I(), 
"origin"_a = PARENT,
 
  276                 "allowUnsafe"_a = false);
 
  279         cls.def(
"__iadd__", [](Image<PixelT> &self, PixelT const &other) { return self += other; });
 
  280         cls.def(
"__iadd__", [](Image<PixelT> &
self, Image<PixelT> 
const &other) { 
return self += other; });
 
  282             return self += other;
 
  284         cls.def(
"__isub__", [](Image<PixelT> &
self, 
PixelT const &other) { 
return self -= other; });
 
  285         cls.def(
"__isub__", [](Image<PixelT> &
self, Image<PixelT> 
const &other) { 
return self -= other; });
 
  287             return self -= other;
 
  289         cls.def(
"__imul__", [](Image<PixelT> &
self, 
PixelT const &other) { 
return self *= other; });
 
  290         cls.def(
"__imul__", [](Image<PixelT> &
self, Image<PixelT> 
const &other) { 
return self *= other; });
 
  291         cls.def(
"__itruediv__", [](Image<PixelT> &
self, 
PixelT const &other) { 
return self /= other; });
 
  292         cls.def(
"__itruediv__",
 
  293                 [](Image<PixelT> &
self, Image<PixelT> 
const &other) { 
return self /= other; });
 
  297         cls.def(
"scaledMinus", &Image<PixelT>::scaledMinus);
 
  298         cls.def(
"scaledMultiplies", &Image<PixelT>::scaledMultiplies);
 
  299         cls.def(
"scaledDivides", &Image<PixelT>::scaledDivides);
 
  301         cls.def(
"subset", &Image<PixelT>::subset, 
"bbox"_a, 
"origin"_a = 
PARENT);
 
  309                 (
void (Image<PixelT>::*)(fits::MemFileManager &,
 
  319                 (
void (Image<PixelT>::*)(
std::string const &, fits::ImageWriteOptions 
const &,
 
  323                 "filename"_a, 
"options"_a, 
"mode"_a = 
"w",
 
  327                 (
void (Image<PixelT>::*)(fits::MemFileManager &, fits::ImageWriteOptions 
const &,
 
  331                 "manager"_a, 
"options"_a, 
"mode"_a = 
"w",
 
  335                 (
void (Image<PixelT>::*)(fits::Fits &, fits::ImageWriteOptions 
const &,
 
  342         cls.def_static(
"readFits", (Image<PixelT>(*)(
std::string const &, 
int))Image<PixelT>::readFits,
 
  344         cls.def_static(
"readFits", (Image<PixelT>(*)(fits::MemFileManager &, 
int))Image<PixelT>::readFits,
 
  346         cls.def(
"sqrt", &Image<PixelT>::sqrt);
 
  350 template <
typename PixelT>
 
  351 static void declareDecoratedImage(lsst::utils::python::WrapperCollection &wrappers,
 
  354             PyDecoratedImage<PixelT>(wrappers.module, (
"DecoratedImage" + suffix).c_str()),
 
  355             [](
auto &mod, 
auto &cls) {
 
  356                 cls.def(py::init<const lsst::geom::Extent2I &>(), 
"dimensions"_a = lsst::geom::Extent2I());
 
  357                 cls.def(py::init<const lsst::geom::Box2I &>(), 
"bbox"_a);
 
  358                 cls.def(py::init<std::shared_ptr<Image<PixelT>>>(), 
"rhs"_a);
 
  359                 cls.def(py::init<DecoratedImage<PixelT> const &, const bool>(), 
"rhs"_a, 
"deep"_a = false);
 
  360                 cls.def(py::init<std::string const &, const int, lsst::geom::Box2I const &, ImageOrigin const,
 
  362                         "fileName"_a, 
"hdu"_a = fits::DEFAULT_HDU, 
"bbox"_a = lsst::geom::Box2I(),
 
  363                         "origin"_a = PARENT, 
"allowUnsafe"_a = false);
 
  365                 cls.def(
"getMetadata", &DecoratedImage<PixelT>::getMetadata);
 
  366                 cls.def(
"setMetadata", &DecoratedImage<PixelT>::setMetadata);
 
  367                 cls.def(
"getWidth", &DecoratedImage<PixelT>::getWidth);
 
  368                 cls.def(
"getHeight", &DecoratedImage<PixelT>::getHeight);
 
  369                 cls.def(
"getX0", &DecoratedImage<PixelT>::getX0);
 
  370                 cls.def(
"getY0", &DecoratedImage<PixelT>::getY0);
 
  371                 cls.def(
"getDimensions", &DecoratedImage<PixelT>::getDimensions);
 
  372                 cls.def(
"swap", &DecoratedImage<PixelT>::swap);
 
  374                         py::overload_cast<std::string const &, std::shared_ptr<daf::base::PropertySet const>,
 
  375                                           std::string const &>(&DecoratedImage<PixelT>::writeFits,
 
  377                         "filename"_a, 
"metadata"_a = std::shared_ptr<daf::base::PropertyList>(),
 
  380                         py::overload_cast<std::string const &, fits::ImageWriteOptions const &,
 
  381                                           std::shared_ptr<daf::base::PropertySet const>, std::string const &>(
 
  382                                 &DecoratedImage<PixelT>::writeFits, py::const_),
 
  383                         "filename"_a, 
"options"_a, 
"metadata"_a = std::shared_ptr<daf::base::PropertyList>(),
 
  385                 cls.def(
"getImage", py::overload_cast<>(&DecoratedImage<PixelT>::getImage));
 
  386                 cls.def_property_readonly(
"image", py::overload_cast<>(&DecoratedImage<PixelT>::getImage));
 
  387                 cls.def(
"getGain", &DecoratedImage<PixelT>::getGain);
 
  388                 cls.def(
"setGain", &DecoratedImage<PixelT>::setGain);
 
  393 template <
typename PixelT>
 
  394 static void addImageSliceOperators(
 
  395         py::class_<Image<PixelT>, 
std::shared_ptr<Image<PixelT>>, ImageBase<PixelT>> &cls) {
 
  398             [](Image<PixelT> 
const &
self, ImageSlice<PixelT> 
const &other) { 
return self + other; },
 
  402             [](Image<PixelT> 
const &
self, ImageSlice<PixelT> 
const &other) { 
return self - other; },
 
  406             [](Image<PixelT> 
const &
self, ImageSlice<PixelT> 
const &other) { 
return self * other; },
 
  410             [](Image<PixelT> 
const &
self, ImageSlice<PixelT> 
const &other) { 
return self / other; },
 
  412     cls.def(
"__iadd__", [](Image<PixelT> &
self, ImageSlice<PixelT> 
const &other) {
 
  416     cls.def(
"__isub__", [](Image<PixelT> &
self, ImageSlice<PixelT> 
const &other) {
 
  420     cls.def(
"__imul__", [](Image<PixelT> &
self, ImageSlice<PixelT> 
const &other) {
 
  424     cls.def(
"__itruediv__", [](Image<PixelT> &
self, ImageSlice<PixelT> 
const &other) {
 
  430 template <
typename PixelT, 
typename PyClass>
 
  431 static void addGeneralizedCopyConstructors(
PyClass &cls) {
 
  432     cls.def(py::init<Image<int> 
const &, 
const bool>(), 
"rhs"_a, 
"deep"_a = 
false);
 
  433     cls.def(py::init<Image<float> 
const &, 
const bool>(), 
"rhs"_a, 
"deep"_a = 
false);
 
  434     cls.def(py::init<Image<double> 
const &, 
const bool>(), 
"rhs"_a, 
"deep"_a = 
false);
 
  435     cls.def(py::init<Image<std::uint16_t> 
const &, 
const bool>(), 
"rhs"_a, 
"deep"_a = 
false);
 
  436     cls.def(py::init<Image<std::uint64_t> 
const &, 
const bool>(), 
"rhs"_a, 
"deep"_a = 
false);
 
  438     cls.def(
"convertI", [](Image<PixelT> 
const &
self) { 
return Image<int>(
self, 
true); });
 
  439     cls.def(
"convertF", [](Image<PixelT> 
const &
self) { 
return Image<float>(
self, 
true); });
 
  440     cls.def(
"convertD", [](Image<PixelT> 
const &
self) { 
return Image<double>(
self, 
true); });
 
  441     cls.def(
"convertU", [](Image<PixelT> 
const &
self) { 
return Image<std::uint16_t>(
self, 
true); });
 
  442     cls.def(
"convertL", [](Image<PixelT> 
const &
self) { 
return Image<std::uint64_t>(
self, 
true); });
 
  444     cls.def(
"convertFloat", [](Image<PixelT> 
const &
self) { 
return Image<float>(
self, 
true); });
 
  445     cls.def(
"convertDouble", [](Image<PixelT> 
const &
self) { 
return Image<double>(
self, 
true); });
 
  448 void wrapImage(lsst::utils::python::WrapperCollection &wrappers) {
 
  449     wrappers.addSignatureDependency(
"lsst.daf.base");
 
  450     wrappers.addSignatureDependency(
"lsst.geom");
 
  451     wrappers.wrapType(py::enum_<ImageOrigin>(wrappers.module, 
"ImageOrigin"), [](
auto &mod, 
auto &enm) {
 
  452         enm.value(
"PARENT", ImageOrigin::PARENT);
 
  453         enm.value(
"LOCAL", ImageOrigin::LOCAL);
 
  457     declareImageBase<int>(wrappers, 
"I");
 
  458     declareImageBase<float>(wrappers, 
"F");
 
  459     declareImageBase<double>(wrappers, 
"D");
 
  460     declareImageBase<std::uint16_t>(wrappers, 
"U");
 
  461     declareImageBase<std::uint64_t>(wrappers, 
"L");
 
  464     declareMask<MaskPixel>(wrappers, 
"X");
 
  466     auto clsImageI = declareImage<int>(wrappers, 
"I");
 
  467     auto clsImageF = declareImage<float>(wrappers, 
"F");
 
  468     auto clsImageD = declareImage<double>(wrappers, 
"D");
 
  469     auto clsImageU = declareImage<std::uint16_t>(wrappers, 
"U");
 
  470     auto clsImageL = declareImage<std::uint64_t>(wrappers, 
"L");
 
  473     addGeneralizedCopyConstructors<int>(clsImageI);
 
  474     addGeneralizedCopyConstructors<float>(clsImageF);
 
  475     addGeneralizedCopyConstructors<double>(clsImageD);
 
  476     addGeneralizedCopyConstructors<std::uint16_t>(clsImageU);
 
  477     addGeneralizedCopyConstructors<std::uint64_t>(clsImageL);
 
  480     addImageSliceOperators<float>(clsImageF);
 
  481     addImageSliceOperators<double>(clsImageD);
 
  483     declareDecoratedImage<int>(wrappers, 
"I");
 
  484     declareDecoratedImage<float>(wrappers, 
"F");
 
  485     declareDecoratedImage<double>(wrappers, 
"D");
 
  486     declareDecoratedImage<std::uint16_t>(wrappers, 
"U");
 
  487     declareDecoratedImage<std::uint64_t>(wrappers, 
"L");
 
  491     declareCastConstructor<int, float>(clsImageF);
 
  492     declareCastConstructor<int, double>(clsImageD);
 
  494     declareCastConstructor<float, double>(clsImageD);
 
  496     declareCastConstructor<double, float>(clsImageF);
 
  498     declareCastConstructor<std::uint16_t, float>(clsImageF);
 
  499     declareCastConstructor<std::uint16_t, double>(clsImageD);
 
  501     declareCastConstructor<std::uint64_t, float>(clsImageF);
 
  502     declareCastConstructor<std::uint64_t, double>(clsImageD);
 
  506     wrappers.wrap([](
auto &mod) { mod.def(
"bboxFromMetadata", &
bboxFromMetadata); });
 
Represent a 2-dimensional array of bitmask pixels.
A Function taking two arguments.
void swap(CameraSys &a, CameraSys &b)
const int DEFAULT_HDU
Specify that the default HDU should be read.
void checkBounds(geom::Point2I const &index, geom::Box2I const &bbox)
Backwards-compatibility support for depersisting the old Calib (FluxMag0/FluxMag0Err) objects.
lsst::geom::Box2I bboxFromMetadata(daf::base::PropertySet &metadata)
Determine the image bounding box from its metadata (FITS header)
void wrapImage(lsst::utils::python::WrapperCollection &wrappers)
void scaledPlus(OutImageT &outImage, double c1, InImageT const &inImage1, double c2, InImageT const &inImage2)
Compute the scaled sum of two images.
py::class_< PixelAreaBoundedField, std::shared_ptr< PixelAreaBoundedField >, BoundedField > PyClass
def writeFits(filename, stamps, metadata, type_name, write_mask, write_variance, write_archive=False)
A base class for image defects.