24#include "pybind11/pybind11.h"
26#include "pybind11/stl.h"
27#include "pybind11/eigen.h"
29#include "ndarray/pybind11.h"
34using namespace pybind11::literals;
41using PySipApproximation = py::class_<SipApproximation, std::shared_ptr<SipApproximation>>;
43void declareSipApproximation(lsst::utils::python::WrapperCollection &wrappers) {
44 wrappers.wrapType(PySipApproximation(wrappers.module,
"SipApproximation"), [](
auto &mod,
auto &cls) {
45 cls.def(py::init<std::shared_ptr<TransformPoint2ToPoint2>, lsst::geom::Point2D const &,
46 Eigen::MatrixXd const &, lsst::geom::Box2D const &, lsst::geom::Extent2I const &,
48 "pixelToIwc"_a,
"crpix"_a,
"cd"_a,
"bbox"_a,
"gridShape"_a,
"order"_a,
"useInverse"_a = true,
49 "svdThreshold"_a = -1);
51 cls.def(py::init<std::shared_ptr<TransformPoint2ToPoint2>, lsst::geom::Point2D const &,
52 Eigen::MatrixXd const &, lsst::geom::Box2D const &, lsst::geom::Extent2I const &,
53 ndarray::Array<double const, 2> const &, ndarray::Array<double const, 2> const &,
54 ndarray::Array<double const, 2> const &, ndarray::Array<double const, 2> const &,
56 "pixelToIwc"_a,
"crpix"_a,
"cd"_a,
"bbox"_a,
"gridShape"_a,
"a"_a,
"b"_a,
"ap"_a,
"bp"_a,
57 "useInverse"_a = true);
59 using ScalarTransform = lsst::geom::Point2D (SipApproximation::*)(lsst::geom::Point2D const &) const;
60 using VectorTransform = std::vector<lsst::geom::Point2D> (SipApproximation::*)(
61 std::vector<lsst::geom::Point2D> const &) const;
63 cls.def(
"getOrder", &SipApproximation::getOrder);
64 cls.def(
"getA", py::overload_cast<int, int>(&SipApproximation::getA, py::const_),
"p"_a,
"q"_a);
65 cls.def(
"getB", py::overload_cast<int, int>(&SipApproximation::getB, py::const_),
"p"_a,
"q"_a);
66 cls.def(
"getAP", py::overload_cast<int, int>(&SipApproximation::getAP, py::const_),
"p"_a,
"q"_a);
67 cls.def(
"getBP", py::overload_cast<int, int>(&SipApproximation::getBP, py::const_),
"p"_a,
"q"_a);
68 cls.def(
"getA", py::overload_cast<>(&SipApproximation::getA, py::const_));
69 cls.def(
"getB", py::overload_cast<>(&SipApproximation::getB, py::const_));
70 cls.def(
"getAP", py::overload_cast<>(&SipApproximation::getAP, py::const_));
71 cls.def(
"getBP", py::overload_cast<>(&SipApproximation::getBP, py::const_));
72 cls.def(
"applyForward", (ScalarTransform)&SipApproximation::applyForward);
73 cls.def(
"applyForward", (VectorTransform)&SipApproximation::applyForward);
74 cls.def(
"applyInverse", (ScalarTransform)&SipApproximation::applyInverse);
75 cls.def(
"applyInverse", (VectorTransform)&SipApproximation::applyInverse);
76 cls.def(
"getGridStep", &SipApproximation::getGridStep);
77 cls.def(
"getGridShape", &SipApproximation::getGridShape);
78 cls.def(
"getBBox", &SipApproximation::getBBox);
79 cls.def(
"getPixelOrigin", &SipApproximation::getPixelOrigin);
80 cls.def(
"getCdMatrix", &SipApproximation::getCdMatrix);
81 cls.def(
"updateGrid", &SipApproximation::updateGrid,
"shape"_a);
82 cls.def(
"refineGrid", &SipApproximation::refineGrid,
"factor"_a = 2);
83 cls.def(
"fit", &SipApproximation::fit,
"order"_a,
"svdThreshold"_a = -1);
84 cls.def(
"computeMaxDeviation", &SipApproximation::computeMaxDeviation);
89 declareSipApproximation(wrappers);
void wrapSipApproximation(lsst::utils::python::WrapperCollection &)