Program Listing for File reconstitute_population_load.hpp¶
↰ Return to documentation for file (include/dish2/load/reconstitute_population_load.hpp)
#pragma once
#ifndef DISH2_LOAD_RECONSTITUTE_POPULATION_LOAD_HPP_INCLUDE
#define DISH2_LOAD_RECONSTITUTE_POPULATION_LOAD_HPP_INCLUDE
#include <fstream>
#include <string>
#include <tuple>
#include <unordered_map>
#include "../../../third-party/bxzstr/include/bxzstr.hpp"
#include "../../../third-party/cereal/include/cereal/archives/binary.hpp"
#include "../../../third-party/conduit/include/uitsl/polyfill/filesystem.hpp"
#include "../../../third-party/conduit/include/uitsl/utility/keyname_directory_filter.hpp"
#include "../../../third-party/Empirical/include/emp/base/always_assert.hpp"
#include "../../../third-party/Empirical/include/emp/base/vector.hpp"
#include "../../../third-party/Empirical/include/emp/tools/keyname_utils.hpp"
#include "../../../third-party/Empirical/include/emp/tools/string_utils.hpp"
#include "../algorithm/seed_genomes_into.hpp"
#include "../genome/Genome.hpp"
#include "../utility/autoload.hpp"
#include "apply_population_filters.hpp"
namespace dish2 {
template< typename Spec >
auto reconstitute_population_load() {
const std::unordered_map<std::string, std::string> filter_attrs{
{"a", "population"},
{"proc", emp::to_string( uitsl::get_proc_id() )},
{"thread", emp::to_string( dish2::thread_idx )},
{"ext", R"(\.bin|\.bin\.gz|\.bin\.xz|\.json|\.json\.gz|\.json\.xz)"}
};
const auto eligible_population_paths = uitsl::keyname_directory_filter(
filter_attrs, ".", true
);
emp_always_assert(
eligible_population_paths.size() == 1,
eligible_population_paths.size(), eligible_population_paths,
emp::keyname::pack(filter_attrs)
);
using population_t = emp::vector< dish2::Genome<Spec> >;
const population_t reconstituted = dish2::apply_population_filters<Spec>(
dish2::autoload< population_t >( eligible_population_paths.front() ),
eligible_population_paths.front()
);
return std::tuple{
eligible_population_paths.front(),
reconstituted
};
}
} // namespace dish2
#endif // #ifndef DISH2_LOAD_RECONSTITUTE_POPULATION_LOAD_HPP_INCLUDE