LSST Applications g070148d5b3+33e5256705,g0d53e28543+25c8b88941,g0da5cf3356+2dd1178308,g1081da9e2a+62d12e78cb,g17e5ecfddb+7e422d6136,g1c76d35bf8+ede3a706f7,g295839609d+225697d880,g2e2c1a68ba+cc1f6f037e,g2ffcdf413f+853cd4dcde,g38293774b4+62d12e78cb,g3b44f30a73+d953f1ac34,g48ccf36440+885b902d19,g4b2f1765b6+7dedbde6d2,g5320a0a9f6+0c5d6105b6,g56b687f8c9+ede3a706f7,g5c4744a4d9+ef6ac23297,g5ffd174ac0+0c5d6105b6,g6075d09f38+66af417445,g667d525e37+2ced63db88,g670421136f+2ced63db88,g71f27ac40c+2ced63db88,g774830318a+463cbe8d1f,g7876bc68e5+1d137996f1,g7985c39107+62d12e78cb,g7fdac2220c+0fd8241c05,g96f01af41f+368e6903a7,g9ca82378b8+2ced63db88,g9d27549199+ef6ac23297,gabe93b2c52+e3573e3735,gb065e2a02a+3dfbe639da,gbc3249ced9+0c5d6105b6,gbec6a3398f+0c5d6105b6,gc9534b9d65+35b9f25267,gd01420fc67+0c5d6105b6,geee7ff78d7+a14128c129,gf63283c776+ede3a706f7,gfed783d017+0c5d6105b6,w.2022.47
LSST Data Management Base Package
Loading...
Searching...
No Matches
frameDict.cc
Go to the documentation of this file.
1/*
2 * LSST Data Management System
3 *
4 * This product includes software developed by the
5 * LSST Project (http://www.lsst.org/).
6 * See the COPYRIGHT file
7 *
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the LSST License Statement and
19 * the GNU General Public License along with this program. If not,
20 * see <https://www.lsstcorp.org/LegalNotices/>.
21 */
22#include <memory>
23
24#include <pybind11/pybind11.h>
25#include <pybind11/stl.h>
26
27namespace py = pybind11;
28using namespace pybind11::literals;
29
30#include "astshim/Channel.h"
31#include "astshim/Frame.h"
32#include "astshim/FrameSet.h"
33#include "astshim/FrameDict.h"
34#include "astshim/Mapping.h"
35#include "astshim/Stream.h"
36
37namespace ast {
38namespace {
39
40/*
41Make a FrameDict from a string output by Object.show()
42
43Use this instead of the standard ObjectMaker for FrameDict
44because ObjectMaker would return a FrameSet (since the serialization
45is the same for both).
46*/
47class FrameDictMaker {
48public:
49 FrameDictMaker() = default;
50 ~FrameDictMaker() = default;
51 std::shared_ptr<Object> operator()(std::string const &state) {
52 ast::StringStream stream(state);
53 ast::Channel chan(stream);
54 auto objPtr = chan.read();
55 auto frameSetPtr = std::dynamic_pointer_cast<ast::FrameSet>(objPtr);
56 if (!frameSetPtr) {
57 throw std::runtime_error("Object being unpickled is a " + objPtr->getClassName() +
58 " not a FrameSet");
59 }
60 return std::make_shared<ast::FrameDict>(*frameSetPtr);
61 }
62};
63
64PYBIND11_MODULE(frameDict, mod) {
65 py::module::import("astshim.frameSet");
66
67 py::class_<FrameDictMaker, std::shared_ptr<FrameDictMaker>> makerCls(mod, "FrameDictMaker");
68 makerCls.def(py::init<>());
69 makerCls.def("__call__", &FrameDictMaker::operator());
70 makerCls.def("__reduce__",
71 [makerCls](FrameDictMaker const &self) { return py::make_tuple(makerCls, py::tuple()); });
72
73 py::class_<FrameDict, std::shared_ptr<FrameDict>, FrameSet> cls(mod, "FrameDict");
74
75 cls.def(py::init<Frame const &, std::string const &>(), "frame"_a, "options"_a = "");
76 cls.def(py::init<Frame const &, Mapping const &, Frame const &, std::string const &>(), "baseFrame"_a,
77 "mapping"_a, "currentFrame"_a, "options"_a = "");
78 cls.def(py::init<FrameSet const &>(), "frameSet"_a);
79 cls.def(py::init<FrameDict const &>());
80
81 cls.def("copy", &FrameDict::copy);
82
83 cls.def("addFrame", py::overload_cast<int, Mapping const &, Frame const &>(&FrameDict::addFrame),
84 "iframe"_a, "map"_a, "frame"_a);
85 cls.def("addFrame",
86 py::overload_cast<std::string const &, Mapping const &, Frame const &>(&FrameDict::addFrame),
87 "domain"_a, "map"_a, "frame"_a);
88 cls.def("getAllDomains", &FrameDict::getAllDomains);
89 cls.def("getFrame", py::overload_cast<int, bool>(&FrameDict::getFrame, py::const_), "index"_a,
90 "copy"_a = true);
91 cls.def("getFrame", py::overload_cast<std::string const &, bool>(&FrameDict::getFrame, py::const_),
92 "domain"_a, "copy"_a = true);
93 cls.def("getMapping", py::overload_cast<int, int>(&FrameDict::getMapping, py::const_),
94 "from"_a = FrameDict::BASE, "to"_a = FrameDict::CURRENT);
95 cls.def("getMapping", py::overload_cast<int, std::string const &>(&FrameDict::getMapping, py::const_),
96 "from"_a = FrameDict::BASE, "to"_a = FrameDict::CURRENT);
97 cls.def("getMapping", py::overload_cast<std::string const &, int>(&FrameDict::getMapping, py::const_),
98 "from"_a = FrameDict::BASE, "to"_a = FrameDict::CURRENT);
99 cls.def("getMapping",
100 py::overload_cast<std::string const &, std::string const &>(&FrameDict::getMapping, py::const_),
101 "from"_a = FrameDict::BASE, "to"_a = FrameDict::CURRENT);
102 cls.def("getIndex", &FrameDict::getIndex, "domain"_a);
103 cls.def("hasDomain", &FrameDict::hasDomain, "domain"_a);
104 cls.def("mirrorVariants", py::overload_cast<int>(&FrameDict::mirrorVariants), "index"_a);
105 cls.def("mirrorVariants", py::overload_cast<std::string const &>(&FrameDict::mirrorVariants), "domain"_a);
106 cls.def("remapFrame", py::overload_cast<int, Mapping &>(&FrameDict::remapFrame), "index"_a, "map"_a);
107 cls.def("remapFrame", py::overload_cast<std::string const &, Mapping &>(&FrameDict::remapFrame),
108 "domain"_a, "map"_a);
109 cls.def("removeFrame", py::overload_cast<int>(&FrameDict::removeFrame), "index"_a);
110 cls.def("removeFrame", py::overload_cast<std::string const &>(&FrameDict::removeFrame), "domain"_a);
111 cls.def("setBase", py::overload_cast<int>(&FrameDict::setBase), "index"_a);
112 cls.def("setBase", py::overload_cast<std::string const &>(&FrameDict::setBase), "domain"_a);
113 cls.def("setCurrent", py::overload_cast<int>(&FrameDict::setCurrent), "index"_a);
114 cls.def("setCurrent", py::overload_cast<std::string const &>(&FrameDict::setCurrent), "domain"_a);
115 cls.def("setDomain", &FrameDict::setDomain, "domain"_a);
116
118 cls.def("__reduce__", [makerCls](Object const &self) {
119 std::string state = self.show(false);
120 auto unpickleArgs = py::make_tuple(state);
121 return py::make_tuple(makerCls(), unpickleArgs);
122 });
123}
124
125} // namespace
126} // namespace ast
Channel provides input/output of AST objects.
Definition: Channel.h:60
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,...
Definition: FrameDict.cc:32
void mirrorVariants(std::string const &domain)
Variant of mirrorVariants(int) with the frame specified by domain.
Definition: FrameDict.h:210
bool hasDomain(std::string const &domain) const
Return True if a frame in this FrameDict has the specified domain.
Definition: FrameDict.h:201
std::shared_ptr< Mapping > getMapping(int from, std::string const &to) const
Variant of FrameSet::getMapping with the second frame specified by domain.
Definition: FrameDict.h:162
std::shared_ptr< FrameDict > copy() const
Return a deep copy of this object.
Definition: FrameDict.h:123
void setCurrent(std::string const &domain)
Variant of setCurrent(int) with the frame specified by domain.
Definition: FrameDict.h:247
std::set< std::string > getAllDomains() const
Get the domain names for all contained Frames (excluding frames with empty or defaulted domain names)...
Definition: FrameDict.cc:45
void removeFrame(int iframe) override
Remove a Frame from a /j/snowflake/release/lsstsw/stack/lsst-scipipe-5.0.0/Linux64/astshim/g38293774b...
Definition: FrameDict.cc:53
void remapFrame(std::string const &domain, Mapping &map)
Variant of remapFrame(int, Mapping&) with the frame specified by domain.
Definition: FrameDict.h:219
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.
Definition: FrameDict.h:151
int getIndex(std::string const &domain) const
Get the index of a frame specified by domain.
Definition: FrameDict.h:189
void setBase(std::string const &domain)
Variant of setBase(int) with the frame specified by domain.
Definition: FrameDict.h:238
void setDomain(std::string const &domain) override
Set the domain of the current frame (and update the internal dict).
Definition: FrameDict.cc:61
static int constexpr CURRENT
index of current frame
Definition: FrameSet.h:105
static int constexpr BASE
index of base frame
Definition: FrameSet.h:104
String-based source and sink for channels.
Definition: Stream.h:180
AST wrapper classes and functions.
PYBIND11_MODULE(_cameraGeom, mod)
Definition: _cameraGeom.cc:38