24 #include <pybind11/pybind11.h>
25 #include <pybind11/stl.h>
28 using namespace pybind11::literals;
47 class FrameDictMaker {
49 FrameDictMaker() =
default;
50 ~FrameDictMaker() =
default;
55 auto objPtr = chan.read();
56 auto frameSetPtr = std::dynamic_pointer_cast<ast::FrameSet>(objPtr);
61 return std::make_shared<ast::FrameDict>(*frameSetPtr);
66 py::module::import(
"astshim.frameSet");
68 py::class_<FrameDictMaker, std::shared_ptr<FrameDictMaker>> makerCls(mod,
"FrameDictMaker");
69 makerCls.def(py::init<>());
70 makerCls.def(
"__call__", &FrameDictMaker::operator());
71 makerCls.def(
"__reduce__",
72 [makerCls](FrameDictMaker
const &
self) {
return py::make_tuple(makerCls, py::tuple()); });
74 py::class_<FrameDict, std::shared_ptr<FrameDict>, FrameSet> cls(mod,
"FrameDict");
76 cls.def(py::init<Frame const &, std::string const &>(),
"frame"_a,
"options"_a =
"");
77 cls.def(py::init<Frame const &, Mapping const &, Frame const &, std::string const &>(),
"baseFrame"_a,
78 "mapping"_a,
"currentFrame"_a,
"options"_a =
"");
79 cls.def(py::init<FrameSet const &>(),
"frameSet"_a);
80 cls.def(py::init<FrameDict const &>());
82 cls.def(
"copy", &FrameDict::copy);
84 cls.def(
"addFrame", py::overload_cast<int, Mapping const &, Frame const &>(&FrameDict::addFrame),
85 "iframe"_a,
"map"_a,
"frame"_a);
87 py::overload_cast<std::string const &, Mapping const &, Frame const &>(&FrameDict::addFrame),
88 "domain"_a,
"map"_a,
"frame"_a);
89 cls.def(
"getAllDomains", &FrameDict::getAllDomains);
90 cls.def(
"getFrame", py::overload_cast<int, bool>(&
FrameDict::getFrame, py::const_),
"index"_a,
92 cls.def(
"getFrame", py::overload_cast<std::string const &, bool>(&
FrameDict::getFrame, py::const_),
93 "domain"_a,
"copy"_a =
true);
94 cls.def(
"getMapping", py::overload_cast<int, int>(&FrameDict::getMapping, py::const_),
95 "from"_a = FrameDict::BASE,
"to"_a = FrameDict::CURRENT);
96 cls.def(
"getMapping", py::overload_cast<int, std::string const &>(&FrameDict::getMapping, py::const_),
97 "from"_a = FrameDict::BASE,
"to"_a = FrameDict::CURRENT);
98 cls.def(
"getMapping", py::overload_cast<std::string const &, int>(&FrameDict::getMapping, py::const_),
99 "from"_a = FrameDict::BASE,
"to"_a = FrameDict::CURRENT);
100 cls.def(
"getMapping",
101 py::overload_cast<std::string const &, std::string const &>(&FrameDict::getMapping, py::const_),
102 "from"_a = FrameDict::BASE,
"to"_a = FrameDict::CURRENT);
103 cls.def(
"getIndex", &FrameDict::getIndex,
"domain"_a);
104 cls.def(
"hasDomain", &FrameDict::hasDomain,
"domain"_a);
105 cls.def(
"mirrorVariants", py::overload_cast<int>(&FrameDict::mirrorVariants),
"index"_a);
106 cls.def(
"mirrorVariants", py::overload_cast<std::string const &>(&FrameDict::mirrorVariants),
"domain"_a);
107 cls.def(
"remapFrame", py::overload_cast<int, Mapping &>(&FrameDict::remapFrame),
"index"_a,
"map"_a);
108 cls.def(
"remapFrame", py::overload_cast<std::string const &, Mapping &>(&FrameDict::remapFrame),
109 "domain"_a,
"map"_a);
110 cls.def(
"removeFrame", py::overload_cast<int>(&FrameDict::removeFrame),
"index"_a);
111 cls.def(
"removeFrame", py::overload_cast<std::string const &>(&FrameDict::removeFrame),
"domain"_a);
112 cls.def(
"setBase", py::overload_cast<int>(&FrameDict::setBase),
"index"_a);
113 cls.def(
"setBase", py::overload_cast<std::string const &>(&FrameDict::setBase),
"domain"_a);
114 cls.def(
"setCurrent", py::overload_cast<int>(&FrameDict::setCurrent),
"index"_a);
115 cls.def(
"setCurrent", py::overload_cast<std::string const &>(&FrameDict::setCurrent),
"domain"_a);
116 cls.def(
"setDomain", &FrameDict::setDomain,
"domain"_a);
119 cls.def(
"__reduce__", [makerCls](Object
const &
self) {
121 auto unpickleArgs = py::make_tuple(state);
122 return py::make_tuple(makerCls(), unpickleArgs);
Channel provides input/output of AST objects.
String-based source and sink for channels.
AST wrapper classes and functions.
PYBIND11_MODULE(_cameraGeom, mod)