22 #include "pybind11/pybind11.h" 
   23 #include "pybind11/stl.h" 
   31 using namespace pybind11::literals;
 
   38 static void declareSipTransformBase(
py::module &mod) {
 
   39     py::class_<SipTransformBase, std::shared_ptr<SipTransformBase>> 
cls(mod, 
"_SipTransformBase");
 
   41     cls.def(
"getPixelOrigin", &SipTransformBase::getPixelOrigin, py::return_value_policy::copy);
 
   42     cls.def(
"getCdMatrix", &SipTransformBase::getCdMatrix, py::return_value_policy::copy);
 
   43     cls.def(
"getPoly", &SipTransformBase::getPoly, py::return_value_policy::copy);
 
   46 static void declareSipForwardTransform(
py::module &mod) {
 
   47     py::class_<SipForwardTransform, std::shared_ptr<SipForwardTransform>, SipTransformBase> 
cls(
 
   48             mod, 
"SipForwardTransform");
 
   50     cls.def(py::init<geom::Point2D const &, geom::LinearTransform const &, PolynomialTransform const &>(),
 
   51             "pixelOrigin"_a, 
"cdMatrix"_a, 
"forwardSipPoly"_a);
 
   52     cls.def(py::init<SipForwardTransform const &>(), 
"other"_a);
 
   54     cls.def_static(
"convert",
 
   55                    (SipForwardTransform(*)(PolynomialTransform 
const &, 
geom::Point2D const &,
 
   58                    "poly"_a, 
"pixelOrigin"_a, 
"cdMatrix"_a);
 
   59     cls.def_static(
"convert",
 
   60                    (SipForwardTransform(*)(ScaledPolynomialTransform 
const &, 
geom::Point2D const &,
 
   63                    "scaled"_a, 
"pixelOrigin"_a, 
"cdMatrix"_a);
 
   64     cls.def_static(
"convert",
 
   68     cls.def(
"__call__", &SipForwardTransform::operator(), 
"in"_a);
 
   69     cls.def(
"transformPixels", &SipForwardTransform::transformPixels, 
"s"_a);
 
   71     cls.def(
"linearize", &SipForwardTransform::linearize);
 
   74 static void declareSipReverseTransform(
py::module &mod) {
 
   75     py::class_<SipReverseTransform, std::shared_ptr<SipReverseTransform>, SipTransformBase> 
cls(
 
   76             mod, 
"SipReverseTransform");
 
   78     cls.def(py::init<geom::Point2D const &, geom::LinearTransform const &, PolynomialTransform const &>(),
 
   79             "pixelOrigin"_a, 
"cdMatrix"_a, 
"reverseSipPoly"_a);
 
   80     cls.def(py::init<SipReverseTransform const &>(), 
"other"_a);
 
   82     cls.def_static(
"convert",
 
   83                    (SipReverseTransform(*)(PolynomialTransform 
const &, 
geom::Point2D const &,
 
   86                    "poly"_a, 
"pixelOrigin"_a, 
"cdMatrix"_a);
 
   87     cls.def_static(
"convert",
 
   88                    (SipReverseTransform(*)(ScaledPolynomialTransform 
const &, 
geom::Point2D const &,
 
   91                    "scaled"_a, 
"pixelOrigin"_a, 
"cdMatrix"_a);
 
   92     cls.def_static(
"convert",
 
   96     cls.def(
"__call__", &SipReverseTransform::operator(), 
"in"_a);
 
   97     cls.def(
"transformPixels", &SipReverseTransform::transformPixels, 
"s"_a);
 
   99     cls.def(
"linearize", &SipReverseTransform::linearize);
 
  105     declareSipTransformBase(mod);
 
  106     declareSipForwardTransform(mod);
 
  107     declareSipReverseTransform(mod);
 
  109     mod.def(
"makeWcs", 
makeWcs, 
"sipForward"_a, 
"sipReverse"_a, 
"skyOrigin"_a);
 
  111     mod.def(
"rotateWcsPixelsBy90", 
rotateWcsPixelsBy90, 
"wcs"_a, 
"nQuarter"_a, 
"dimensions"_a);