23 #include "pybind11/pybind11.h" 27 #include "numpy/arrayobject.h" 28 #include "ndarray/pybind11.h" 30 #include "lsst/afw/table/BaseRecord.h" 33 namespace py = pybind11;
42 using PyShapeResult = py::class_<ShapeResult, std::shared_ptr<ShapeResult>>;
43 using PyShapeResultKey = py::class_<ShapeResultKey, std::shared_ptr<ShapeResultKey>>;
45 void declareShapeResult(py::module &mod) {
46 PyShapeResult cls(mod,
"ShapeResult");
48 cls.def(py::init<>());
49 cls.def(py::init<ShapeElement, ShapeElement, ShapeElement, ShapeCov const &>(),
50 "xx"_a,
"yy"_a,
"xy"_a,
"matrix"_a);
51 cls.def(py::init<ShapeElement, ShapeElement, ShapeElement, ErrElement, ErrElement, ErrElement>(),
52 "xx"_a,
"yy"_a,
"xy"_a,
"xxSigma"_a,
"yySigma"_a,
"xySigma"_a);
54 cls.def(
"getShape", &ShapeResult::getShape);
55 cls.def(
"getQuadrupole", &ShapeResult::getQuadrupole);
56 cls.def(
"setShape", &ShapeResult::setShape,
"shape"_a);
57 cls.def(
"getShapeErr", &ShapeResult::getShapeErr);
58 cls.def(
"setShapeErr",
59 (
void (ShapeResult::*)(
ShapeCov const &)) &ShapeResult::setShapeErr,
"matrix"_a);
60 cls.def(
"setShapeErr",
62 "xxSigma"_a,
"yySigma"_a,
"xySigma"_a);
64 cls.def_readwrite(
"xx", &ShapeResult::xx);
65 cls.def_readwrite(
"yy", &ShapeResult::yy);
66 cls.def_readwrite(
"xy", &ShapeResult::xy);
67 cls.def_readwrite(
"xxSigma", &ShapeResult::xxSigma);
68 cls.def_readwrite(
"yySigma", &ShapeResult::yySigma);
69 cls.def_readwrite(
"xySigma", &ShapeResult::xySigma);
70 cls.def_readwrite(
"xx_yy_Cov", &ShapeResult::xx_yy_Cov);
71 cls.def_readwrite(
"xx_xy_Cov", &ShapeResult::xx_xy_Cov);
72 cls.def_readwrite(
"yy_xy_Cov", &ShapeResult::yy_xy_Cov);
75 void declareShapeResultKey(py::module &mod) {
76 PyShapeResultKey cls(mod,
"ShapeResultKey");
78 cls.def_static(
"addFields", &ShapeResultKey::addFields,
"schema"_a,
"name"_a,
"doc"_a,
"uncertainty"_a,
79 "coordType"_a = afw::table::CoordinateType::PIXEL);
81 cls.def(py::init<>());
82 cls.def(py::init<afw::table::QuadrupoleKey
const &,
83 afw::table::CovarianceMatrixKey<ErrElement, 3>
const &>(),
84 "shape"_a,
"shapeErr"_a);
85 cls.def(py::init<afw::table::SubSchema const &>(),
"subSchema"_a);
87 cls.def(
"__eq__", &ShapeResultKey::operator==, py::is_operator());
88 cls.def(
"__ne__", &ShapeResultKey::operator!=, py::is_operator());
90 cls.def(
"get", &ShapeResultKey::get,
"record"_a);
91 cls.def(
"set", &ShapeResultKey::set,
"record"_a,
"value"_a);
92 cls.def(
"isValid", &ShapeResultKey::isValid);
93 cls.def(
"getShape", &ShapeResultKey::getShape);
94 cls.def(
"getShapeErr", &ShapeResultKey::getShapeErr);
95 cls.def(
"getIxx", &ShapeResultKey::getIxx);
96 cls.def(
"getIyy", &ShapeResultKey::getIyy);
97 cls.def(
"getIxy", &ShapeResultKey::getIxy);
103 py::module::import(
"lsst.afw.table");
105 py::module mod(
"shapeUtilities");
107 if (_import_array() < 0) {
108 PyErr_SetString(PyExc_ImportError,
"numpy.core.multiarray failed to import");
112 declareShapeResult(mod);
113 declareShapeResultKey(mod);
ShapeTrMatrix makeShapeTransformMatrix(afw::geom::LinearTransform const &xform)
Construct a matrix suitable for transforming second moments.
Eigen::Matrix< ErrElement, 3, 3, Eigen::DontAlign > ShapeCov
PYBIND11_PLUGIN(shapeUtilities)