79template <ComputeData InputType = std::vector<Kakshya::DataVariant>, ComputeData OutputType = InputType>
98 [[nodiscard]] std::string
get_name()
const override
100 return get_analyzer_name();
108 if (name ==
"granularity") {
109 if (
auto* gran = std::any_cast<AnalysisGranularity>(&value)) {
110 m_granularity = *gran;
114 set_analysis_parameter(name, std::move(value));
117 [[nodiscard]] std::any
get_parameter(
const std::string& name)
const override
119 if (name ==
"granularity") {
120 return std::any(m_granularity);
123 return get_analysis_parameter(name);
128 auto params = get_all_analysis_parameters();
129 params[
"granularity"] = std::any(m_granularity);
135 m_granularity = granularity;
140 return m_granularity;
148 return validate_analysis_input(input);
157 return {
"default" };
167 auto methods = get_available_methods();
168 return std::find(methods.begin(), methods.end(), method) != methods.end();
179 m_current_output = this->apply_operation(input_io);
180 return m_current_analysis;
190 std::vector<std::any> analyses;
191 analyses.reserve(inputs.size());
193 for (
const auto& input : inputs) {
194 analyses.push_back(analyze_data(input));
206 return m_current_analysis;
215 return m_current_analysis.has_value();
225 template <
typename T>
228 auto param = get_analysis_parameter(name);
229 if (param.has_value()) {
231 return std::any_cast<T>(param);
232 }
catch (
const std::bad_any_cast&) {
233 return default_value;
236 return default_value;
251 auto raw_result = analyze_implementation(input);
252 return apply_granularity_formatting(raw_result);
273 m_parameters[name] = std::move(value);
278 auto it = m_parameters.find(name);
279 return (it != m_parameters.end()) ? it->second : std::any {};
303 switch (m_granularity) {
304 case AnalysisGranularity::RAW_VALUES:
307 case AnalysisGranularity::ATTRIBUTED_SEGMENTS:
308 return add_attribution_metadata(raw_output);
310 case AnalysisGranularity::ORGANIZED_GROUPS:
311 return organize_into_groups(raw_output);
313 case AnalysisGranularity::SUMMARY_STATISTICS:
314 return create_summary_statistics(raw_output);
327 attributed.
metadata[
"analysis_type"] =
static_cast<int>(get_analysis_type());
328 attributed.
metadata[
"analyzer_name"] = get_analyzer_name();
329 attributed.
metadata[
"granularity"] =
static_cast<int>(m_granularity);
339 return add_attribution_metadata(raw_output);
348 auto summary = add_attribution_metadata(raw_output);
349 summary.metadata[
"is_summary"] =
true;
355 template <
typename AnalysisResultType>
358 m_current_analysis = std::forward<AnalysisResultType>(result);
369template <ComputeData OutputType = std::vector<Kakshya::DataVariant>>
373template <ComputeData OutputType = std::shared_ptr<Kakshya::SignalSourceContainer>>
377template <ComputeData OutputType = Kakshya::Region>
381template <ComputeData OutputType = Kakshya::RegionGroup>
385template <ComputeData OutputType = std::vector<Kakshya::RegionSegment>>
389template <ComputeData InputType = std::vector<Kakshya::DataVariant>>
393template <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
std::string get_name() const override
Gets human-readable name for this analyzer.
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
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)
Batch analysis for multiple 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)
User-facing analysis method - returns analysis results directly.
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)
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::unordered_map< std::string, std::any > metadata
Associated metadata.
Input/Output container for computation pipeline data flow with structure preservation.