"""Constants and enums for feature management."""
from enum import Enum
from typing import Union
# Default processing identifier
DEFAULT_PROCESSING = "raw"
[docs]
class FeatureLayout(str, Enum):
"""Feature data layout formats.
String values ensure backward compatibility with existing pipelines
that use layout="3d_transpose" as strings.
"""
FLAT_2D = "2d" # (samples, processings * features)
FLAT_2D_INTERLEAVED = "2d_interleaved" # (samples, features * processings)
VOLUME_3D = "3d" # (samples, processings, features)
VOLUME_3D_TRANSPOSE = "3d_transpose" # (samples, features, processings)
# Type aliases for backward compatibility
LayoutType = Union[str, FeatureLayout]
HeaderUnitType = Union[str, HeaderUnit]
[docs]
def normalize_layout(layout: LayoutType) -> FeatureLayout:
"""Convert string layout to enum for backward compatibility.
Args:
layout: Layout as string or enum
Returns:
FeatureLayout enum value
Raises:
ValueError: If layout string is invalid
"""
if isinstance(layout, FeatureLayout):
return layout
try:
return FeatureLayout(layout)
except ValueError:
valid = [e.value for e in FeatureLayout]
raise ValueError(f"Invalid layout '{layout}'. Valid options: {valid}")