25template <ComputeData T = std::vector<Kakshya::DataVariant>>
30 std::unordered_map<std::string, std::any>
metadata;
33 std::optional<std::shared_ptr<Kakshya::SignalSourceContainer>>
container;
36 Datum()
requires std::default_initializable<T> = default;
62 Datum(
const T& d,
const std::shared_ptr<Kakshya::SignalSourceContainer>& cont)
96 Datum(T&& d,
const std::shared_ptr<Kakshya::SignalSourceContainer>& cont)
149 void set_container(
const std::shared_ptr<Kakshya::SignalSourceContainer>& cont)
169 if constexpr (std::is_same_v<T, std::shared_ptr<Kakshya::SignalSourceContainer>>) {
181 if constexpr (std::is_same_v<T, std::shared_ptr<Kakshya::SignalSourceContainer>>) {
228 size_t min_dimensions = 1)
const
258 template <
typename ValueType>
270 template <
typename ValueType>
278 return safe_any_cast<ValueType>(it->second);
291template <ComputeData T = std::vector<Kakshya::DataVariant>>
307 [[nodiscard]]
virtual std::string
get_name()
const = 0;
343template <ComputeData T>
346 std::vector<Datum<T>> wrapped;
347 wrapped.reserve(inputs.size());
348 for (
const auto& i : inputs)
349 wrapped.emplace_back(i);
359template <ComputeData T>
362 std::vector<Datum<T>> wrapped;
363 wrapped.reserve(inputs.size());
364 for (
auto& i : inputs)
365 wrapped.emplace_back(std::move(i));
Core::GlobalInputConfig input
virtual Datum< T > execute(const Datum< T > &input)=0
Execute the operation on input data.
virtual std::string get_name() const =0
Get the name/identifier of this operation.
virtual ~OpUnit()=default
const auto & get_dependencies() const
Get all dependency operations.
void add_dependency(std::shared_ptr< OpUnit< T > > dep)
Add a dependency operation unit.
std::vector< std::shared_ptr< OpUnit< T > > > dependencies
Operation dependencies.
Abstract base class for operation units in recursive processing graphs.
Composite data that retains its field layout and presence information.
Any Eigen matrix type, regardless of scalar type.
Types that yield multiple data channels on extraction.
Concept to constrain types suitable for operation units.
Types that represent spatial or temporal markers requiring a container to resolve data.
Types that need an associated SignalSourceContainer to extract data.
DataModality
Data modality types for cross-modal analysis.
@ UNKNOWN
Unknown or undefined modality.
int find_dimension_by_role(const std::vector< DataDimension > &dimensions, DataDimension::Role role)
Find the index of a dimension by its semantic role.
std::vector< Datum< T > > as_io_batch(const std::vector< T > &inputs)
Convert a vector of raw values into a vector of Datum wrappers.
static std::pair< std::vector< Kakshya::DataDimension >, Kakshya::DataModality > infer_structure(const T &data, const std::shared_ptr< Kakshya::SignalSourceContainer > &container=nullptr)
Infer dimensions and modality from any ComputeData type.
Role
Semantic role of the dimension.
T & operator*()
Access underlying data (mutable)
bool b_container_processing
bool has_modality(Kakshya::DataModality target_modality) const
Check if data has specific modality.
Datum()=default
Construct an empty datum when its data type has a valid default.
Datum(T &&d, const std::shared_ptr< Kakshya::SignalSourceContainer > &cont)
Construct from data by move with automatic structure inference.
T data
The actual computation data.
int find_dimension_by_role(Kakshya::DataDimension::Role role) const
Find dimension by semantic role.
Datum(T &&d)
Construct from data by move with automatic structure inference.
void set_metadata(const std::string &key, ValueType &&value)
Add or update metadata entry.
void set_container_processing(bool val)
Set whether processing is needed (for container types)
bool has_container() const
Check if a container reference is associated.
bool is_suitable_for_processing(Kakshya::DataModality required_modality, size_t min_dimensions=1) const
Check if data is suitable for a specific type of processing.
std::vector< Kakshya::DataDimension > dimensions
Data dimensional structure.
std::optional< ValueType > get_metadata(const std::string &key) const
Get metadata entry with type safety.
Datum(T &&d, const std::shared_ptr< Kakshya::SignalSourceContainer > container, std::vector< Kakshya::DataDimension > dims, Kakshya::DataModality mod)
Construct with move and explicit structure information.
bool needs_processig() const
Check if processing is needed (for container types)
std::optional< std::shared_ptr< Kakshya::SignalSourceContainer > > container
Optional reference to container, required for regions.
Kakshya::DataModality modality
Data modality (audio, image, spectral, etc.)
uint64_t get_total_elements() const
Get total number of elements across all dimensions.
void set_container(const std::shared_ptr< Kakshya::SignalSourceContainer > &cont)
Set or update the associated container reference.
const T & operator*() const
Access underlying data (const)
Datum(T &&d, std::vector< Kakshya::DataDimension > dims, Kakshya::DataModality mod)
Construct with move and explicit structure information.
std::unordered_map< std::string, std::any > metadata
Associated metadata.
void update_structure(std::vector< Kakshya::DataDimension > new_dims, Kakshya::DataModality new_modality)
Update structure information (use carefully!)
Datum(const T &d, const std::shared_ptr< Kakshya::SignalSourceContainer > &cont)
Construct from data by copy with container reference and automatic structure inference.
Input/Output container for computation pipeline data flow with structure preservation.
Helper to detect if a type is an Datum.