22 #include "pybind11/pybind11.h" 23 #include "pybind11/stl.h" 27 #include "numpy/arrayobject.h" 28 #include "ndarray/pybind11.h" 30 #include "lsst/afw/geom/AffineTransform.h" 34 namespace py = pybind11;
43 static void declarePolynomialTransform(py::module &mod) {
44 py::class_<PolynomialTransform, std::shared_ptr<PolynomialTransform>> cls(mod,
"PolynomialTransform");
46 cls.def(py::init<ndarray::Array<double const, 2, 2>
const &,
47 ndarray::Array<double const, 2, 2>
const &>(),
48 "xCoeffs"_a,
"yCoeffs"_a);
49 cls.def(py::init<PolynomialTransform const &>(),
"other"_a);
51 cls.def_static(
"convert",
52 (PolynomialTransform(*)(ScaledPolynomialTransform
const &)) & PolynomialTransform::convert,
54 cls.def_static(
"convert",
55 (PolynomialTransform(*)(SipForwardTransform
const &)) & PolynomialTransform::convert,
57 cls.def_static(
"convert",
58 (PolynomialTransform(*)(SipReverseTransform
const &)) & PolynomialTransform::convert,
61 cls.def(
"__call__", &PolynomialTransform::operator(),
"in"_a);
63 cls.def(
"getOrder", &PolynomialTransform::getOrder);
64 cls.def(
"getXCoeffs", &PolynomialTransform::getXCoeffs);
65 cls.def(
"getYCoeffs", &PolynomialTransform::getYCoeffs);
66 cls.def(
"linearize", &PolynomialTransform::linearize);
69 static void declareScaledPolynomialTransform(py::module &mod) {
70 py::class_<ScaledPolynomialTransform, std::shared_ptr<ScaledPolynomialTransform>> cls(
71 mod,
"ScaledPolynomialTransform");
73 cls.def(py::init<PolynomialTransform
const &, afw::geom::AffineTransform
const &,
74 afw::geom::AffineTransform
const &>(),
75 "poly"_a,
"inputScaling"_a,
"outputScalingInverse"_a);
76 cls.def(py::init<ScaledPolynomialTransform const &>(),
"other"_a);
78 cls.def_static(
"convert", (ScaledPolynomialTransform(*)(PolynomialTransform
const &)) &
79 ScaledPolynomialTransform::convert,
81 cls.def_static(
"convert", (ScaledPolynomialTransform(*)(SipForwardTransform
const &)) &
82 ScaledPolynomialTransform::convert,
84 cls.def_static(
"convert", (ScaledPolynomialTransform(*)(SipReverseTransform
const &)) &
85 ScaledPolynomialTransform::convert,
88 cls.def(
"__call__", &ScaledPolynomialTransform::operator(),
"in"_a);
90 cls.def(
"getPoly", &ScaledPolynomialTransform::getPoly, py::return_value_policy::reference_internal);
91 cls.def(
"getInputScaling", &ScaledPolynomialTransform::getInputScaling,
92 py::return_value_policy::reference_internal);
93 cls.def(
"getOutputScalingInverse", &ScaledPolynomialTransform::getOutputScalingInverse,
94 py::return_value_policy::reference_internal);
95 cls.def(
"linearize", &ScaledPolynomialTransform::linearize);
101 py::module mod(
"polynomialTransform");
103 if (_import_array() < 0) {
104 PyErr_SetString(PyExc_ImportError,
"numpy.core.multiarray failed to import");
108 declarePolynomialTransform(mod);
109 declareScaledPolynomialTransform(mod);
PolynomialTransform compose(afw::geom::AffineTransform const &t1, PolynomialTransform const &t2)
Return a PolynomialTransform that is equivalent to the composition t1(t2())
PYBIND11_PLUGIN(polynomialTransform)