24#include <pybind11/pybind11.h>
26#include <pybind11/stl.h>
29using namespace pybind11::literals;
50 FrameDictMaker() =
default;
51 ~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);
67 using PyFrameDictMaker = py::class_<FrameDictMaker, std::shared_ptr<FrameDictMaker>>;
68 static auto clsMaker = wrappers.wrapType(PyFrameDictMaker(wrappers.module,
"FrameDictMaker"), [](
auto &mod,
auto &cls) {
69 cls.def(py::init<>());
70 cls.def(
"__call__", &FrameDictMaker::operator());
72 [cls](FrameDictMaker const &self) { return py::make_tuple(cls, py::tuple()); });
75 using PyFrameDict = py::class_<FrameDict, std::shared_ptr<FrameDict>, FrameSet>;
76 wrappers.wrapType(PyFrameDict(wrappers.module,
"FrameDict"), [](
auto &mod,
auto &cls) {
78 cls.def(py::init<Frame const &, std::string const &>(),
"frame"_a,
"options"_a =
"");
79 cls.def(py::init<Frame const &, Mapping const &, Frame const &, std::string const &>(),
"baseFrame"_a,
80 "mapping"_a,
"currentFrame"_a,
"options"_a =
"");
81 cls.def(py::init<FrameSet const &>(),
"frameSet"_a);
82 cls.def(py::init<FrameDict const &>());
86 cls.def(
"addFrame", py::overload_cast<int, Mapping const &, Frame const &>(&
FrameDict::addFrame),
87 "iframe"_a,
"map"_a,
"frame"_a);
89 py::overload_cast<std::string const &, Mapping const &, Frame const &>(&
FrameDict::addFrame),
90 "domain"_a,
"map"_a,
"frame"_a);
92 cls.def(
"getFrame", py::overload_cast<int, bool>(&
FrameDict::getFrame, py::const_),
"index"_a,
94 cls.def(
"getFrame", py::overload_cast<std::string const &, bool>(&
FrameDict::getFrame, py::const_),
95 "domain"_a,
"copy"_a =
true);
98 cls.def(
"getMapping", py::overload_cast<int, std::string const &>(&
FrameDict::getMapping, py::const_),
100 cls.def(
"getMapping", py::overload_cast<std::string const &, int>(&
FrameDict::getMapping, py::const_),
102 cls.def(
"getMapping",
109 cls.def(
"remapFrame", py::overload_cast<int, Mapping &>(&
FrameDict::remapFrame),
"index"_a,
"map"_a);
111 "domain"_a,
"map"_a);
115 cls.def(
"setBase", py::overload_cast<std::string const &>(&
FrameDict::setBase),
"domain"_a);
121 cls.def(
"__reduce__", [](Object
const &self) {
123 auto unpickleArgs = py::make_tuple(state);
124 return py::make_tuple(clsMaker(), unpickleArgs);
Channel provides input/output of AST objects.
void addFrame(int iframe, Mapping const &map, Frame const &frame) override
Add a new Frame and an associated Mapping to this FrameSet so as to define a new coordinate system,...
void mirrorVariants(std::string const &domain)
Variant of mirrorVariants(int) with the frame specified by domain.
bool hasDomain(std::string const &domain) const
Return True if a frame in this FrameDict has the specified domain.
std::shared_ptr< Mapping > getMapping(int from, std::string const &to) const
Variant of FrameSet::getMapping with the second frame specified by domain.
std::shared_ptr< FrameDict > copy() const
Return a deep copy of this object.
void setCurrent(std::string const &domain)
Variant of setCurrent(int) with the frame specified by domain.
std::set< std::string > getAllDomains() const
Get the domain names for all contained Frames (excluding frames with empty or defaulted domain names)...
void removeFrame(int iframe) override
Remove a Frame from a FrameSet.
void remapFrame(std::string const &domain, Mapping &map)
Variant of remapFrame(int, Mapping&) with the frame specified by domain.
std::shared_ptr< Frame > getFrame(std::string const &domain, bool copy=true) const
Variant of getFrame(int, bool) where the frame is specified by domain name.
int getIndex(std::string const &domain) const
Get the index of a frame specified by domain.
void setBase(std::string const &domain)
Variant of setBase(int) with the frame specified by domain.
void setDomain(std::string const &domain) override
Set the domain of the current frame (and update the internal dict).
static int constexpr CURRENT
index of current frame
static int constexpr BASE
index of base frame
String-based source and sink for channels.
AST wrapper classes and functions.
void wrapFrameDict(WrapperCollection &)