134 {
135 if (!container) {
136 throw std::invalid_argument("Null container provided for region extraction");
137 }
138
139 if constexpr (std::is_same_v<T, Kakshya::Region>) {
140 auto data = container->get_region_data(compute_data);
141 return Kakshya::convert_variants<double>(data);
142
143 } else if constexpr (std::is_same_v<T, Kakshya::RegionGroup>) {
144 if (compute_data.regions.empty()) {
145 throw std::runtime_error("Empty RegionGroup cannot be extracted");
146 }
147 auto data = container->get_region_group_data(compute_data);
148 return Kakshya::convert_variants<double>(data);
149
150 } else if constexpr (std::is_same_v<T, std::vector<Kakshya::RegionSegment>>) {
151 if (compute_data.empty()) {
152 throw std::runtime_error("RegionSegment contains no extractable data");
153 }
154 auto data = container->get_segments_data(compute_data);
155 return Kakshya::convert_variants<double>(data);
156 }
157 }