16 return std::make_pair(std::move(dimensions), modality);
25 return std::make_pair(std::move(dimensions), modality);
32 throw std::invalid_argument(
"Cannot infer structure from null container");
35 const auto& structure = container->get_structure();
36 auto dimensions = structure.dimensions;
38 auto modality = structure.modality;
43 if (dimensions.empty()) {
44 auto total_elements = structure.get_total_elements();
45 if (total_elements > 0) {
51 return std::make_pair(std::move(dimensions), modality);
58 std::vector<Kakshya::DataDimension> dimensions;
63 auto structure = container->get_structure();
68 std::vector<uint64_t> shape;
70 shape.push_back(std::abs(size) + 1);
74 region_modality.has_value()) {
77 modality = region_modality.value();
83 return { dimensions, modality };
87infer_from_segments(
const std::vector<Kakshya::RegionSegment>& segments,
const std::shared_ptr<Kakshya::SignalSourceContainer>& container)
89 if (segments.empty() || !container) {
93 bool consistent_coords = std::ranges::all_of(segments,
94 [&](
const auto& seg) {
95 return seg.source_region.end_coordinates.size() == segments[0].source_region.end_coordinates.size();
98 if (consistent_coords) {
102 auto max_coord_segment = std::ranges::max_element(segments,
103 [](
const auto& a,
const auto& b) {
104 return a.source_region.end_coordinates.size() < b.source_region.end_coordinates.size();
112 if (!container || group.
regions.empty()) {
116 auto structure = container->get_structure();
119 if (bounds_info.contains(
"bounding_min") && bounds_info.contains(
"bounding_max")) {
120 auto min_coords = std::any_cast<std::vector<uint64_t>>(bounds_info[
"bounding_min"]);
121 auto max_coords = std::any_cast<std::vector<uint64_t>>(bounds_info[
"bounding_max"]);
123 std::vector<uint64_t> shape;
124 int size =
static_cast<int>(max_coords[0] - min_coords[0]);
125 shape.push_back(std::abs(size) + 1);
126 shape.push_back(max_coords[1]);
128 auto modality = group.
attributes.contains(
"modality") ? std::any_cast<Kakshya::DataModality>(group.
attributes.at(
"modality")) : structure.modality;
131 return { dimensions, modality };
std::vector< DataDimension > detect_data_dimensions(const DataVariant &data)
Detect data dimensions from a DataVariant.
std::variant< std::vector< double >, std::vector< float >, std::vector< uint8_t >, std::vector< uint16_t >, std::vector< uint32_t >, std::vector< std::complex< float > >, std::vector< std::complex< double > >, std::vector< glm::vec2 >, std::vector< glm::vec3 >, std::vector< glm::vec4 >, std::vector< glm::mat4 > > DataVariant
Multi-type data storage for different precision needs.
DataModality
Data modality types for cross-modal analysis.
@ AUDIO_1D
1D audio signal
@ UNKNOWN
Unknown or undefined modality.
DataModality detect_data_modality(const std::vector< DataDimension > &dimensions)
Detects data modality from dimension information.
std::unordered_map< std::string, std::any > extract_group_bounds_info(const RegionGroup &group)
Extract bounds information from region group.
std::pair< std::vector< Kakshya::DataDimension >, Kakshya::DataModality > infer_from_container(const std::shared_ptr< Kakshya::SignalSourceContainer > &container)
Infer structure from SignalSourceContainer.
std::pair< std::vector< Kakshya::DataDimension >, Kakshya::DataModality > infer_from_data_variant(const Kakshya::DataVariant &data)
Infer structure from DataVariant.
std::pair< std::vector< Kakshya::DataDimension >, Kakshya::DataModality > infer_from_data_variant_vector(const std::vector< Kakshya::DataVariant > &data)
Infer structure from vector of DataVariants (NEW)
std::pair< std::vector< Kakshya::DataDimension >, Kakshya::DataModality > infer_from_region(const Kakshya::Region ®ion, const std::shared_ptr< Kakshya::SignalSourceContainer > &container)
Infer structure from Region (placeholder since regions are markers)
std::pair< std::vector< Kakshya::DataDimension >, Kakshya::DataModality > infer_from_region_group(const Kakshya::RegionGroup &group, const std::shared_ptr< Kakshya::SignalSourceContainer > &container)
Infer structure from RegionGroup.
std::pair< std::vector< Kakshya::DataDimension >, Kakshya::DataModality > infer_from_segments(const std::vector< Kakshya::RegionSegment > &segments, const std::shared_ptr< Kakshya::SignalSourceContainer > &container)
Infer structure from RegionSegments.
static DataDimension time(uint64_t samples, std::string name="time")
Convenience constructor for a temporal (time) dimension.
static std::vector< DataDimension > create_dimensions(DataModality modality, const std::vector< uint64_t > &shape, MemoryLayout layout=MemoryLayout::ROW_MAJOR)
Create dimension descriptors for a data modality.
std::unordered_map< std::string, std::any > attributes
Flexible key-value store for group-specific attributes.
std::vector< Region > regions
Collection of regions belonging to this group.
Organizes related signal regions into a categorized collection.
std::optional< T > get_attribute(const std::string &key) const
Get an attribute value by key, with type conversion support.
std::vector< uint64_t > end_coordinates
Ending frame index (inclusive)
std::vector< uint64_t > start_coordinates
Starting frame index (inclusive)
Represents a point or span in N-dimensional space.