38 auto seed_details = internal_misc::load_seed_details(handle,
"seed", version, options);
39 const auto& seed_dims = seed_details.dimensions;
41 auto value_details = internal_misc::load_seed_details(handle,
"value", version, options);
43 if ((value_details.type == STRING) != (seed_details.type == STRING)) {
44 throw std::runtime_error(
"both or neither of the 'seed' and 'value' arrays should contain strings");
46 if (seed_dims.size() != value_details.dimensions.size()) {
47 throw std::runtime_error(
"'seed' and 'value' arrays should have the same dimensionalities");
50 auto ihandle = ritsuko::hdf5::open_group(handle,
"index");
51 auto collected = internal_subset::validate_index_list(ihandle, seed_dims, version);
52 auto expected_dims = seed_dims;
53 for (
auto p : collected) {
54 expected_dims[p.first] = p.second;
57 if (!internal_misc::are_dimensions_equal(expected_dims, value_details.dimensions)) {
58 throw std::runtime_error(
"'value' dimension extents are not consistent with lengths of indices in 'index'");
63 seed_details.type = std::max(seed_details.type, value_details.type);