28 #include "openPMD/backend/Container.hpp"
29 #include "openPMD/backend/MeshRecordComponent.hpp"
30 #include "openPMD/backend/PatchRecord.hpp"
31 #include "openPMD/backend/PatchRecordComponent.hpp"
33 #include "openPMD/binding/python/Common.hpp"
49 template <
typename Map,
typename... Args>
50 py::class_<Map, std::unique_ptr<Map>, Args...>
51 declare_container(py::handle scope, std::string
const &name)
53 using holder_type = std::unique_ptr<Map>;
54 using KeyType =
typename Map::key_type;
55 using MappedType =
typename Map::mapped_type;
56 using Class_ = py::class_<Map, holder_type, Args...>;
61 auto tinfo = py::detail::get_type_info(
typeid(MappedType));
62 bool local = !tinfo || tinfo->module_local;
65 tinfo = py::detail::get_type_info(
typeid(KeyType));
66 local = !tinfo || tinfo->module_local;
69 Class_ cl(scope, name.c_str(), py::module_local(local));
74 py::detail::map_if_insertion_operator<Map, Class_>(cl, name);
78 [](
const Map &m) ->
bool {
return !m.empty(); },
79 "Check whether the container is nonempty");
83 [](Map &m) {
return py::make_key_iterator(m.begin(), m.end()); },
85 py::keep_alive<0, 1>());
87 cl.def(
"__repr__", [name](Map
const &m) {
88 std::stringstream stream;
89 stream <<
"<openPMD." << name <<
" with ";
90 if (
size_t num_entries = m.size(); num_entries == 1)
92 stream <<
"1 entry and ";
96 stream << num_entries <<
" entries and ";
99 stream << m.numAttributes() <<
" attribute(s)>";
106 template <
typename Map,
typename Class_>
107 Class_ finalize_container(Class_ cl)
109 using KeyType =
typename Map::key_type;
110 using MappedType =
typename Map::mapped_type;
114 [](Map &m) {
return py::make_iterator(m.begin(), m.end()); },
116 py::keep_alive<0, 1>());
121 [](Map &m, KeyType
const &k) -> MappedType & {
return m[k]; },
125 py::return_value_policy::copy);
128 py::detail::map_assignment<Map, Class_>(cl);
130 cl.def(
"__delitem__", [](Map &m, KeyType
const &k) {
133 throw py::key_error();
137 cl.def(
"__len__", &Map::size);
139 cl.def(
"_ipython_key_completions_", [](Map &m) {
141 for (
const auto &myPair : m)
142 l.append(myPair.first);
Public definitions of openPMD-api.
Definition: Date.cpp:29