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