52 name = std::string(
"spatial_") + axis;
79 uint64_t element_count,
80 uint8_t components_per_element,
89 std::optional<double> invalid)
93 "DataDimension::with_range on '{}': max ({}) must exceed min ({}); range not applied",
129 const std::vector<uint64_t>& shape,
132 std::vector<DataDimension> dims;
137 if (shape.size() != 1) {
138 error<std::invalid_argument>(
141 std::source_location::current(),
142 "AUDIO_1D requires 1D shape");
148 if (shape.size() != 2) {
149 error<std::invalid_argument>(
152 std::source_location::current(),
153 "AUDIO_MULTICHANNEL requires 2D shape [samples, channels]");
160 if (shape.size() != 2) {
161 error<std::invalid_argument>(
164 std::source_location::current(),
165 "IMAGE_2D requires 2D shape [height, width]");
172 if (shape.size() != 3) {
173 error<std::invalid_argument>(
176 std::source_location::current(),
177 "IMAGE_COLOR requires 3D shape [height, width, channels]");
185 if (shape.size() != 4) {
186 error<std::invalid_argument>(
189 std::source_location::current(),
190 "IMAGE_COLOR_ARRAY requires 4D shape [frames, height, width, channels]");
199 if (shape.size() != 3) {
200 error<std::invalid_argument>(
203 std::source_location::current(),
204 "DEPTH_MAP requires 3D shape [height, width, components]");
212 if (shape.size() != 2) {
213 error<std::invalid_argument>(
216 std::source_location::current(),
217 "SPECTRAL_2D requires 2D shape [time_windows, frequency_bins]");
221 dims[1].stride = strides[1];
225 if (shape.size() != 3) {
226 error<std::invalid_argument>(
229 std::source_location::current(),
230 "VOLUMETRIC_3D requires 3D shape [x, y, z]");
238 if (shape.size() != 3) {
239 error<std::invalid_argument>(
242 std::source_location::current(),
243 "VIDEO_GRAYSCALE requires 3D shape [frames, height, width]");
251 if (shape.size() != 4) {
252 error<std::invalid_argument>(
255 std::source_location::current(),
256 "VIDEO_COLOR requires 4D shape [frames, height, width, channels]");
265 if (shape.size() != 4) {
266 error<std::invalid_argument>(
269 std::source_location::current(),
270 "VIDEO_DEPTH requires 4D shape [frames, height, width, components]");
279 error<std::invalid_argument>(
282 std::source_location::current(),
290 const std::vector<uint64_t>& shape,
296 std::vector<uint64_t> strides(shape.size());
299 auto reversed_shape = shape | std::views::reverse;
301 reversed_shape.begin(),
302 reversed_shape.end(),
305 std::multiplies<uint64_t> {});
312 std::multiplies<uint64_t> {});
#define MF_ERROR(comp, ctx,...)
@ Runtime
General runtime operations (default fallback)
@ Kakshya
Containers[Signalsource, Stream, File], Regions, DataProcessors.
DataModality
Data modality types for cross-modal analysis.
@ DEPTH_MAP
[height, width, components] - range/disparity image
@ AUDIO_MULTICHANNEL
Multi-channel audio.
@ SPECTRAL_2D
2D spectral data (time + frequency)
@ AUDIO_1D
1D audio signal
@ VIDEO_DEPTH
[frames, height, width, components] - streaming range data
@ IMAGE_COLOR_ARRAY
4D (idx + 2D + color)
@ VOLUMETRIC_3D
3D volumetric data
@ VIDEO_GRAYSCALE
3D video (time + 2D grayscale)
@ VIDEO_COLOR
4D video (time + 2D + color)
@ IMAGE_COLOR
2D RGB/RGBA image
@ IMAGE_2D
2D image (grayscale or single channel)
MemoryLayout
Memory layout for multi-dimensional data.
@ ROW_MAJOR
C/C++ style (last dimension varies fastest)
std::string_view modality_to_string(DataModality modality)
Convert DataModality enum to string representation.
constexpr std::string_view enum_to_string(EnumType value) noexcept
Universal enum to string converter using magic_enum (original case)
Grouping information for sub-dimensions.
Numeric interpretation of the values along this dimension.
std::optional< ValueRange > value_range
static DataDimension spatial_2d(uint64_t width, uint64_t height)
Convenience constructor for a 2D spatial dimension.
Role
Semantic role of the dimension.
@ COLOR
Color data (RGB/RGBA)
@ FREQUENCY
Spectral/frequency axis.
@ MIP_LEVEL
Mipmap levels.
@ SPATIAL_Y
Spatial Y axis.
@ TIME
Temporal progression (samples, frames, steps)
@ SPATIAL_Z
Spatial Z axis.
@ POSITION
Vertex positions (3D space)
@ DEPTH
Distance from the observation point (depth, disparity, range)
@ CHANNEL
Parallel streams (audio channels, color channels)
@ SPATIAL_X
Spatial X axis (images, tensors)
uint64_t stride
Memory stride (elements between consecutive indices)
std::string name
Human-readable identifier for the dimension.
static DataDimension vertex_positions(uint64_t count)
Create dimension for vertex positions (vec3)
DataDimension & with_range(double min, double max, std::optional< double > invalid=std::nullopt)
Attach a value range.
uint64_t size
Number of elements in this dimension.
static DataDimension vertex_colors(uint64_t count, bool has_alpha=false)
Create dimension for colors (vec3 or vec4)
Role role
Semantic hint for common operations.
static DataDimension spatial(uint64_t size, char axis, uint64_t stride=1, std::string name="spatial")
Convenience constructor for a spatial dimension.
static DataDimension grouped(std::string name, uint64_t element_count, uint8_t components_per_element, Role role=Role::CUSTOM)
Create dimension with component grouping.
static DataDimension vertex_normals(uint64_t count)
Create dimension for vertex normals (vec3)
static DataDimension frequency(uint64_t bins, std::string name="frequency")
Convenience constructor for a frequency dimension.
static DataDimension spatial_1d(uint64_t width)
Convenience constructor for an array dimension.
static DataDimension time(uint64_t samples, std::string name="time")
Convenience constructor for a temporal (time) dimension.
static std::vector< uint64_t > calculate_strides(const std::vector< uint64_t > &shape, MemoryLayout layout)
Calculate memory strides based on shape and layout.
static DataDimension depth(uint64_t count=1, uint64_t stride=1)
Convenience constructor for a depth 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.
static DataDimension mipmap_levels(uint64_t levels)
Create dimension for mipmap levels.
static DataDimension texture_coords(uint64_t count)
Create dimension for texture coordinates (vec2)
static DataDimension spatial_3d(uint64_t width, uint64_t height, uint64_t depth)
Convenience constructor for a 3D spatial dimension.
std::optional< ComponentGroup > grouping
static DataDimension channel(uint64_t count, uint64_t stride=1)
Convenience constructor for a channel dimension.
Minimal dimension descriptor focusing on structure only.