143 std::optional<char>
axis = std::nullopt;
196template <ComputeData InputType = Kakshya::DataVariant, ComputeData OutputType = InputType>
224 [[nodiscard]] std::string
get_name()
const override
226 return get_transformer_name();
244 if (name ==
"strategy") {
245 auto strategy_result = safe_any_cast<TransformationStrategy>(value);
246 if (strategy_result) {
247 m_strategy = *strategy_result.value;
250 auto str_result = safe_any_cast<std::string>(value);
252 auto strategy_enum = Utils::string_to_enum_case_insensitive<TransformationStrategy>(*str_result.value);
254 m_strategy = *strategy_enum;
259 if (name ==
"quality") {
260 auto quality_result = safe_any_cast<TransformationQuality>(value);
261 if (quality_result) {
262 m_quality = *quality_result.value;
265 auto str_result = safe_any_cast<std::string>(value);
267 auto quality_enum = Utils::string_to_enum_case_insensitive<TransformationQuality>(*str_result.value);
269 m_quality = *quality_enum;
274 if (name ==
"scope") {
275 auto scope_result = safe_any_cast<TransformationScope>(value);
277 m_scope = *scope_result.value;
280 auto str_result = safe_any_cast<std::string>(value);
282 auto scope_enum = Utils::string_to_enum_case_insensitive<TransformationScope>(*str_result.value);
284 m_scope = *scope_enum;
289 set_transformation_parameter(name, std::move(value));
300 [[nodiscard]] std::any
get_parameter(
const std::string& name)
const override
302 if (name ==
"strategy") {
305 if (name ==
"quality") {
308 if (name ==
"scope") {
311 return get_transformation_parameter(name);
323 auto params = get_transformation_parameters();
324 params[
"strategy"] = m_strategy;
325 params[
"quality"] = m_quality;
326 params[
"scope"] = m_scope;
395 m_intensity = std::clamp(intensity, 0.0, 2.0);
414 m_transformation_keys.push_back(key);
424 m_transformation_keys.clear();
433 return m_transformation_keys;
444 template <ComputeData T>
447 m_custom_function = [func](
const std::any& a) -> std::any {
448 auto val_result = safe_any_cast<T>(a);
450 return func(*val_result);
463 [[nodiscard]]
virtual bool is_in_place()
const {
return m_strategy == TransformationStrategy::IN_PLACE; }
495 if (!validate_input(input)) {
496 return create_safe_output(input);
498 auto raw_result = transform_implementation(
const_cast<input_type&
>(input));
499 return apply_scope_and_quality_processing(raw_result);
532 m_parameters[name] = std::move(value);
542 auto it = m_parameters.find(name);
543 return (it != m_parameters.end()) ? it->second : std::any {};
580 std::vector<double> parameters;
581 parameters.reserve(m_transformation_keys.size());
583 for (
const auto& key : m_transformation_keys) {
586 if (key.axis.has_value()) {
589 param = key.parameter_extractor(input.
data[key.channel]);
592 param = std::clamp(param, 0.0, 1.0);
594 parameters.push_back(param * key.intensity * key.weight);
596 parameters.push_back(0.0);
622 auto numeric_data = OperationHelper::extract_numeric_data(input.
data, input.
container.value());
623 return validate_multi_channel_data(numeric_data);
625 auto numeric_data = OperationHelper::extract_numeric_data(input.
data);
626 return validate_multi_channel_data(numeric_data);
649 result.
metadata[
"validation_failed"] =
true;
650 result.
metadata[
"fallback_reason"] =
"Input validation failed";
652 if constexpr (std::is_same_v<InputType, OutputType>) {
657 result.
container = std::make_shared<Kakshya::SignalSourceContainer>();
678 if (channels.empty()) {
682 for (
const auto& channel : channels) {
683 if (channel.empty()) {
687 for (
double sample : channel) {
688 if (std::isnan(sample)) {
691 if (std::isinf(sample)) {
704 double m_intensity = 1.0;
Base interface for all computational operations in the processing pipeline.
@ TEMPORAL
Time-based patterns, onset detection.
@ CUSTOM
User-defined analysis types.
@ SPATIAL
Multi-dimensional geometric analysis.
@ SPECTRAL
Spectral energy (FFT-based)
@ RECURSIVE
Recursive/nested extraction.
@ PATTERN_BASED
Extract based on pattern recognition.
@ CONVOLUTION
Convolution-based operations.
TransformationScope
Scope control for transformation operations.
@ SELECTIVE_BANDS
Transform specific frequency/spatial bands.
@ CONDITIONAL
Transform based on dynamic conditions.
TransformationQuality
Quality vs performance trade-off control.
@ HIGH_QUALITY
High-quality transformation, may be slower.
@ DRAFT
Fast, low-quality transformation for previews.
@ ADAPTIVE
Quality adapts based on available computational resources.
@ REFERENCE
Maximum quality, computational cost is secondary.
@ IN_PLACE
Sort data in-place (modifies input)
@ CROSS_MODAL
Sort one modality by features of another.
@ STANDARD
std::sort with comparator
@ PARALLEL
Parallel with other operations.
TransformationType
Categories of transformation operations for discovery and organization.
@ GENERATIVE
AI/ML-driven or algorithmic generation-based transformations.
@ GRANULAR
Granular synthesis and micro-temporal transformations.
@ MATHEMATICAL
Mathematical transformations (polynomial mapping, matrix operations)
TransformationStrategy
Transformation execution strategies.
@ BUFFERED
Create transformed copy (preserves input)
@ LAZY
Lazy evaluation transformation (future: coroutines)
@ CHUNKED
Transform in chunks for efficient processing.
@ INCREMENTAL
Progressive transformation with intermediate results.
@ STREAMING
Stream-based transformation for large data.
@ FULL_DATA
Extract all available data.
@ TARGETED_REGIONS
Extract only specific regions.
bool has_container() const
Check if a container reference is associated.
T data
The actual computation data.
std::unordered_map< std::string, std::any > metadata
Associated metadata.
std::optional< std::shared_ptr< Kakshya::SignalSourceContainer > > container
Optional reference to container, required for regions.
std::vector< Kakshya::DataDimension > dimensions
Data dimensional structure.
Kakshya::DataModality modality
Data modality (audio, image, spectral, etc.)
Input/Output container for computation pipeline data flow with structure preservation.