79template <ComputeData InputType = std::vector<Kakshya::DataVariant>, ComputeData OutputType = InputType>
98 [[nodiscard]] std::string
get_name()
const override
100 return get_analyzer_name();
105 return OperationType::ANALYZER;
113 if (name ==
"granularity") {
114 if (
auto result = safe_any_cast<AnalysisGranularity>(value)) {
115 m_granularity = *result.value;
119 set_analysis_parameter(name, std::move(value));
122 [[nodiscard]] std::any
get_parameter(
const std::string& name)
const override
124 if (name ==
"granularity") {
125 return std::any(m_granularity);
128 return get_analysis_parameter(name);
133 auto params = get_all_analysis_parameters();
134 params[
"granularity"] = std::any(m_granularity);
140 m_granularity = granularity;
145 return m_granularity;
153 return validate_analysis_input(input);
162 return {
"default" };
172 auto methods = get_available_methods();
173 return std::find(methods.begin(), methods.end(), method) != methods.end();
183 m_current_output = this->apply_operation(data);
184 return m_current_analysis;
189 return this->analyze_data(
input_type { data });
199 std::vector<std::any> analyses;
200 analyses.reserve(inputs.size());
202 for (
const auto& input : inputs) {
203 analyses.push_back(analyze_data(input));
220 return m_current_analysis;
229 return m_current_analysis.has_value();
239 template <
typename T>
242 return safe_any_cast_or_default<T>(get_analysis_parameter(name), default_value);
257 auto raw_result = analyze_implementation(input);
258 return apply_granularity_formatting(raw_result);
279 m_parameters[name] = std::move(value);
284 auto it = m_parameters.find(name);
285 return (it != m_parameters.end()) ? it->second : std::any {};
309 switch (m_granularity) {
310 case AnalysisGranularity::RAW_VALUES:
313 case AnalysisGranularity::ATTRIBUTED_SEGMENTS:
314 return add_attribution_metadata(raw_output);
316 case AnalysisGranularity::ORGANIZED_GROUPS:
317 return organize_into_groups(raw_output);
319 case AnalysisGranularity::SUMMARY_STATISTICS:
320 return create_summary_statistics(raw_output);
333 attributed.
metadata[
"analysis_type"] =
static_cast<int>(get_analysis_type());
334 attributed.
metadata[
"analyzer_name"] = get_analyzer_name();
335 attributed.
metadata[
"granularity"] =
static_cast<int>(m_granularity);
345 return add_attribution_metadata(raw_output);
354 auto summary = add_attribution_metadata(raw_output);
355 summary.metadata[
"is_summary"] =
true;
361 template <
typename AnalysisResultType>
364 m_current_analysis = std::forward<AnalysisResultType>(result);
375template <ComputeData OutputType = std::vector<Kakshya::DataVariant>>
379template <ComputeData OutputType = std::shared_ptr<Kakshya::SignalSourceContainer>>
383template <ComputeData OutputType = Kakshya::Region>
387template <ComputeData OutputType = Kakshya::RegionGroup>
391template <ComputeData OutputType = std::vector<Kakshya::RegionSegment>>
395template <ComputeData InputType = std::vector<Kakshya::DataVariant>>
399template <ComputeData InputType = std::vector<Kakshya::DataVariant>>
Base interface for all computational operations in the processing pipeline.
virtual void set_analysis_parameter(const std::string &name, std::any value)
Analysis-specific parameter handling (override for custom parameters)
T get_parameter_or_default(const std::string &name, const T &default_value) const
Helper to get typed parameter with default value.
std::any get_parameter(const std::string &name) const override
Retrieves a parameter's current value.
std::any get_current_analysis() const
Access cached analysis from last operation.
virtual ~UniversalAnalyzer()=default
virtual output_type add_attribution_metadata(const output_type &raw_output)
Add attribution metadata to results (override for custom attribution)
virtual AnalysisType get_analysis_type() const =0
Gets the analysis type category for this analyzer.
std::map< std::string, std::any > m_parameters
OperationType get_operation_type() const override
Returns the category of this operation for grammar and registry discovery.
std::string get_name() const override
Gets human-readable name for this analyzer.
std::vector< std::any > analyze_batch(const std::vector< input_type > &inputs)
Batch analysis for multiple inputs.
void set_parameter(const std::string &name, std::any value) override
Type-safe parameter management with analysis-specific defaults.
AnalysisGranularity get_analysis_granularity() const
virtual std::vector< std::string > get_available_methods() const
Get available analysis methods for this analyzer.
std::any m_current_analysis
std::any analyze_data(const input_type &data)
User-facing analysis method - returns analysis results directly.
virtual std::any get_analysis_parameter(const std::string &name) const
output_type m_current_output
output_type operation_function(const input_type &input) override
Core analysis implementation - must be overridden by derived classes.
virtual output_type analyze_implementation(const input_type &input)=0
Pure virtual analysis implementation - derived classes implement this.
void store_current_analysis(AnalysisResultType &&result) const
void set_analysis_granularity(AnalysisGranularity granularity)
std::map< std::string, std::any > get_all_parameters() const override
Retrieves all parameters and their values.
virtual output_type apply_granularity_formatting(const output_type &raw_output)
Apply granularity-based output formatting.
std::vector< std::any > analyze_batch(const std::vector< InputType > &inputs)
bool has_current_analysis() const
Check if analysis has been performed.
virtual output_type organize_into_groups(const output_type &raw_output)
Organize results into hierarchical groups (override for custom grouping)
virtual std::string get_analyzer_name() const
Get analyzer-specific name (derived classes override this)
virtual std::map< std::string, std::any > get_all_analysis_parameters() const
bool validate_input(const input_type &input) const override
Validates input data meets analyzer requirements.
virtual output_type create_summary_statistics(const output_type &raw_output)
Create summary statistics from results (override for custom summaries)
virtual bool validate_analysis_input(const input_type &) const
Input validation (override for custom validation logic)
virtual bool supports_method(const std::string &method) const
Check if a specific analysis method is supported.
std::any analyze_data(const InputType &data)
Template-flexible analyzer base with instance-defined I/O types.
AnalysisType
Categories of analysis operations for discovery and organization.
@ PATTERN
Pattern recognition and matching.
@ TEMPORAL
Time-based patterns, onset detection.
@ CUSTOM
User-defined analysis types.
@ SPATIAL
Multi-dimensional geometric analysis.
@ FEATURE
Feature extraction and characterization.
@ TRANSFORM
Mathematical transformations.
@ STATISTICAL
Mean, variance, distribution analysis.
@ SPECTRAL
Spectral energy (FFT-based)
OperationType
Operation categories for organization and discovery.
AnalysisGranularity
Output granularity control for analysis results.
@ SUMMARY_STATISTICS
Condensed statistical summaries.
@ ATTRIBUTED_SEGMENTS
Results with metadata/attribution.
@ ORGANIZED_GROUPS
Hierarchically organized results.
@ RAW_VALUES
Direct analysis results.
std::vector< Datum< T > > as_io_batch(const std::vector< T > &inputs)
Convert a vector of raw values into a vector of Datum wrappers.
std::unordered_map< std::string, std::any > metadata
Associated metadata.
Input/Output container for computation pipeline data flow with structure preservation.