22 #include "pybind11/pybind11.h"
23 #include "pybind11/eigen.h"
28 #include "pybind11/stl.h"
29 #include "ndarray/pybind11.h"
36 using namespace py::literals;
45 template <
class Class>
49 os <<
"[" <<
self.getFromEndpoint().getNAxes() <<
"->" <<
self.getToEndpoint().getNAxes() <<
"]";
53 template <
class FromEndpo
int,
class ToEndpo
int,
class NextToEndpo
int,
class PyClass>
55 using ThisTransform = Transform<FromEndpoint, ToEndpoint>;
56 using NextTransform = Transform<ToEndpoint, NextToEndpoint>;
57 using SeriesTransform = Transform<FromEndpoint, NextToEndpoint>;
61 ThisTransform::template then<NextToEndpoint>,
62 "next"_a,
"simplify"_a =
true);
68 template <
class FromEndpo
int,
class ToEndpo
int>
70 using Class = Transform<FromEndpoint, ToEndpoint>;
71 using ToPoint =
typename ToEndpoint::Point;
72 using ToArray =
typename ToEndpoint::Array;
73 using FromPoint =
typename FromEndpoint::Point;
74 using FromArray =
typename FromEndpoint::Array;
76 std::string const pyClassName = Class::getShortClassName();
78 py::class_<Class, std::shared_ptr<Class>>
cls(mod, pyClassName.
c_str());
80 cls.def(py::init<ast::FrameSet const &, bool>(),
"frameSet"_a,
"simplify"_a =
true);
81 cls.def(py::init<ast::Mapping const &, bool>(),
"mapping"_a,
"simplify"_a =
true);
83 cls.def_property_readonly(
"hasForward", &Class::hasForward);
84 cls.def_property_readonly(
"hasInverse", &Class::hasInverse);
85 cls.def_property_readonly(
"fromEndpoint", &Class::getFromEndpoint);
86 cls.def_property_readonly(
"toEndpoint", &Class::getToEndpoint);
90 cls.def(
"getMapping", [](Class
const &
self) {
return self.getMapping()->
copy(); });
92 cls.def(
"applyForward", py::overload_cast<FromArray const &>(&Class::applyForward, py::const_),
94 cls.def(
"applyForward", py::overload_cast<FromPoint const &>(&Class::applyForward, py::const_),
96 cls.def(
"applyInverse", py::overload_cast<ToArray const &>(&Class::applyInverse, py::const_),
"array"_a);
97 cls.def(
"applyInverse", py::overload_cast<ToPoint const &>(&Class::applyInverse, py::const_),
"point"_a);
98 cls.def(
"inverted", &Class::inverted);
105 cls.def_static(
"readString", &Class::readString);
106 cls.def(
"writeString", &Class::writeString);
108 declareMethodTemplates<FromEndpoint, ToEndpoint, GenericEndpoint>(
cls);
109 declareMethodTemplates<FromEndpoint, ToEndpoint, Point2Endpoint>(
cls);
110 declareMethodTemplates<FromEndpoint, ToEndpoint, SpherePointEndpoint>(
cls);
113 cls.def(
"__str__", [pyClassName](Class
const &
self) {
return formatStr(
self, pyClassName); });
116 [pyClassName](Class
const &
self) {
return "lsst.afw.geom." + formatStr(
self, pyClassName); });
118 table::io::python::addPersistableMethods<Class>(
cls);
122 py::module::import(
"astshim");
123 py::module::import(
"lsst.afw.geom.endpoint");
125 declareTransform<GenericEndpoint, GenericEndpoint>(mod);
126 declareTransform<GenericEndpoint, Point2Endpoint>(mod);
127 declareTransform<GenericEndpoint, SpherePointEndpoint>(mod);
128 declareTransform<Point2Endpoint, GenericEndpoint>(mod);
129 declareTransform<Point2Endpoint, Point2Endpoint>(mod);
130 declareTransform<Point2Endpoint, SpherePointEndpoint>(mod);
131 declareTransform<SpherePointEndpoint, GenericEndpoint>(mod);
132 declareTransform<SpherePointEndpoint, Point2Endpoint>(mod);
133 declareTransform<SpherePointEndpoint, SpherePointEndpoint>(mod);