11 #include "../utils/join.h" 12 #include "../utils/message.h" 13 #include "../utils/pyargs_to_vec.h" 14 #include "../utils/runtime_error.h" 49 data.get_ref<Json::array_t&>().clear();
50 data.get_ref<Json::array_t&>().shrink_to_fit();
61 auto shared_this = shared_from_this();
65 if (pair.first == shared_this)
67 pair.second->remove_from_skippable_elementids(
elementid);
76 "Data-" + std::to_string(
elementid) +
" was used illegally");
99 const Vec<Str> keys = key_.is_array() ? key_ : Json::array({key_});
102 int distance_from_begin_ex = 0;
106 if (std::find(keys.cbegin(), keys.cend(), *it) != keys.cend())
108 int distance_from_begin = std::distance(
datakeys.cbegin(), it);
109 distances.push_back(std::make_pair(
110 *it, distance_from_begin - distance_from_begin_ex));
111 distance_from_begin_ex = distance_from_begin;
128 return shared_from_this();
141 return shared_from_this();
147 const Str &classname)
149 #pragma omp critical (set_accessing_classname) 160 auto gen = upd->get_ext_generator();
169 return shared_from_this();
192 auto reduced_data = Json::array();
196 reduced_data.get_ref<Json::array_t&>().reserve(
data.size());
199 for (
const auto &d :
data.is_array() ?
data : Json::array({
data}))
201 reduced_data.push_back({});
202 auto &back = reduced_data.back();
203 auto it_item = d.begin();
205 for (
const auto &pair : pairs_key_and_distance)
207 std::advance(it_item, pair.second);
208 back[pair.first] = *it_item;
212 return data.is_array() ? reduced_data : reduced_data.front();
217 template <
typename T>
222 array.resize(
data.is_array() ?
data.size() : 1);
224 const auto key_position = std::distance(
229 for (
const auto &d :
data.is_array() ?
data : Json::array({
data}))
231 array(index++) = *std::next(d.cbegin(), key_position);
237 template <
typename T>
242 array.resize(
data.is_array() ?
data.size() : 1, keys.size());
247 pairs_distance_and_icol.push_back(std::make_pair(
250 keys.cbegin(), std::find(keys.cbegin(), keys.cend(), pair.first))
256 for (
const auto &d :
data.is_array() ?
data : Json::array({
data}))
258 auto it_item = d.begin();
260 for (
const auto &pair : pairs_distance_and_icol)
262 std::advance(it_item, pair.first);
263 array(irow, pair.second) = *it_item;
276 for (
const auto &el : (
data.is_array() ?
data.front() :
data).items())
287 const Vec<Str> keys = key_.is_array() ? key_ : Json::array({key_});
290 for (
const auto &key : keys)
294 missing_keys.push_back(key);
298 if (!missing_keys.empty())
300 std::sort(missing_keys.begin(), missing_keys.end());
302 Str msg =
"Missing key(s) '" +
ut::join(missing_keys,
"', '") +
"'";
318 const Vec<Str> keys = key_.is_array() ? key_ : Json::array({key_});
320 for (
const auto &key : keys)
382 const py::args &args)
400 const py::args &args)
ArrayXd get_1d_float_py(const Str &key)
Get float values stored in Element::data of this object as a one-dimensional Numpy-Array.
Set< Str > get_keys_py()
Get keys of the data of this object.
This file has a definition of Element class, which is one of the cores of this program.
ShPtr< Element > ElPtr
An alias for a shared pointer of Element class.
Json make_reduced_data(const Json &key_)
Get reduced data of this object.
Set< Str > get_keys()
Get keys of the data of this object.
const Json & get_data()
Get a reference to data of this object.
Eigen::Array< double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > ArrayXXd
ArrayXXd is an alias for a two-dimensional array of float numbers.
void make_2darray_from_data(T &array, const Vec< Str > &keys)
Extract values of properties in data as a two-dimensional Eigen-Array.
void check_required_keys(const Json &key_)
Check if this object has required key(s).
const Json & get_data_py()
Get a reference to data of this object.
ArrayXXd get_2d_float_py(const py::args &args)
Get float values stored in Element::data of this object as a two-dimensional Numpy-Array.
Vec< std::pair< Str, int > > get_distances_between_keys(const Json &key_)
To speed up accessing values in Json.
std::string Str
Str is an alias for string.
Element()
Constructor of Element class.
virtual ShPtr< Element > get_element(const Json &name=nullptr) override
Get this object as a shared pointer of Element class.
std::pair< ShPtr< Element >, ShPtr< Updater > > UpdatePair
UpdatePair is a pair of shared pointer of Element class and Updater class.
nlohmann::json Json
Json is an alias for nlohmann::json.
Eigen::Array< int, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > ArrayXXi
ArrayXXi is an alias for a two-dimensional integer array.
void generate_data()
Hello to this Generator object.
std::unordered_set< T > Set
Set is an alias for unordered set (same as set in Python).
void merge_update_chain(const Vec< UpdatePair > &new_chain)
void update_keys()
Update datakeys. This method must be called after setting new properties to data. ...
virtual ShPtr< Generator > get_generator(const Json &name=nullptr) override
Get this object as a shared pointer of Generator class.
void pyargs_to_vec(const py::args &args, Vec< T > &vec)
Convert a py::args (a variable number arguments) object to a Vec object.
std::vector< T > Vec
Vec is an alias for vector (same as list in Python).
void decrement_bookings()
ShPtr< Element > append_updater(const ShPtr< Updater > &upd)
Append an Updater object to this Element object: the only way to extend an updating process associate...
void runtime_error(const Str &msg)
Raise (for Python) and throw (for C++) a runtime error.
Eigen::Array< int, Eigen::Dynamic, 1 > ArrayXi
ArrayXi is an alias for a column array of integers.
static int n_element_instances
void update_data(const ShPtr< Updater > &upd)
Str join(const Vec< Str > &strs, const Str &jointer)
Mimicking Python's join.
void log(const Str &msg)
Logging a message.
bool check_optional_keys(const Json &key_)
Check if this object has optional key(s).
Namespace for utility functions.
ArrayXXi get_2d_int_py(const py::args &args)
Get integer values stored in Element::data of this object as a two-dimensional Numpy-Array.
Eigen::Array< double, Eigen::Dynamic, 1 > ArrayXd
ArrayXd is an alias for a column array of float numbers.
Vec< UpdatePair > update_chain
virtual void accessed_by_instance_of(const Str &classname) override
Set class name of an instance calling Element::check_required_keys.
std::shared_ptr< T > ShPtr
ShPtr is an alias for shared pointer.
void make_1darray_from_data(T &array, const Str &key)
Extract values of a property in data as a one-dimensional Eigen-Array.
void increment_bookings()
ArrayXi get_1d_int_py(const Str &key)
Get integer values stored in Element::data of this object as a one-dimensional Numpy-Array.
This file has a definition of Updater class, which is one of the cores of this program.