use crate::analysis::BifurcationPoint;
use scirs2_core::ndarray::{Array1, Array2, Array3};
use std::collections::HashMap;
#[derive(Debug, Clone)]
pub struct PhaseSpacePlot {
pub x: Vec<f64>,
pub y: Vec<f64>,
pub colors: Option<Vec<f64>>,
pub metadata: PlotMetadata,
}
#[derive(Debug, Clone)]
pub struct BifurcationDiagram {
pub parameters: Vec<f64>,
pub states: Vec<Vec<f64>>,
pub stability: Vec<bool>,
pub bifurcation_points: Vec<BifurcationPoint>,
}
#[derive(Debug, Clone)]
pub struct PlotMetadata {
pub title: String,
pub xlabel: String,
pub ylabel: String,
pub annotations: HashMap<String, String>,
}
impl Default for PlotMetadata {
fn default() -> Self {
Self {
title: "Numerical Integration Result".to_string(),
xlabel: "X".to_string(),
ylabel: "Y".to_string(),
annotations: HashMap::new(),
}
}
}
#[derive(Debug, Clone)]
pub struct VectorFieldPlot {
pub x_grid: Array2<f64>,
pub y_grid: Array2<f64>,
pub u: Array2<f64>,
pub v: Array2<f64>,
pub magnitude: Array2<f64>,
pub metadata: PlotMetadata,
}
#[derive(Debug, Clone)]
pub struct HeatMapPlot {
pub x: Array1<f64>,
pub y: Array1<f64>,
pub z: Array2<f64>,
pub metadata: PlotMetadata,
}
#[derive(Debug, Clone)]
pub struct SurfacePlot {
pub x: Array2<f64>,
pub y: Array2<f64>,
pub z: Array2<f64>,
pub metadata: PlotMetadata,
}
#[derive(Debug, Clone, Copy)]
pub enum OutputFormat {
ASCII,
CSV,
JSON,
SVG,
}
#[derive(Debug, Clone, Copy)]
pub enum ColorScheme {
Viridis,
Plasma,
Inferno,
Grayscale,
}
#[derive(Debug, Clone)]
pub struct PlotStatistics {
pub count: usize,
pub mean: f64,
pub std_dev: f64,
pub min: f64,
pub max: f64,
pub median: f64,
}
#[derive(Debug, Clone)]
pub struct ParameterExplorationPlot {
pub x_grid: Array2<f64>,
pub y_grid: Array2<f64>,
pub z_values: Array2<f64>,
pub param_ranges: Vec<(f64, f64)>,
pub param_names: Vec<String>,
pub metadata: PlotMetadata,
}
#[derive(Debug, Clone, PartialEq)]
pub enum AttractorStability {
FixedPoint,
PeriodTwo,
Periodic(usize),
QuasiPeriodic,
Chaotic,
Unknown,
}
#[derive(Debug, Clone)]
pub struct RealTimeBifurcationPlot {
pub parameter_values: Vec<f64>,
pub attractor_data: Vec<Vec<Vec<f64>>>,
pub stability_data: Vec<Vec<AttractorStability>>,
pub parameter_range: (f64, f64),
pub metadata: PlotMetadata,
}
#[derive(Debug, Clone)]
pub struct PhaseSpace3D {
pub x: Vec<f64>,
pub y: Vec<f64>,
pub z: Vec<f64>,
pub colors: Option<Vec<f64>>,
pub metadata: PlotMetadata,
}
#[derive(Debug, Clone)]
pub struct SensitivityPlot {
pub parameter_names: Vec<String>,
pub sensitivities: Vec<f64>,
pub base_parameters: Vec<f64>,
pub base_value: f64,
pub metadata: PlotMetadata,
}
#[derive(Debug, Clone)]
pub struct InteractivePlotControls {
pub zoom: f64,
pub pan_offset: (f64, f64),
pub selected_ranges: Vec<(f64, f64)>,
pub current_frame: usize,
pub animation_speed: f64,
pub visibility_flags: std::collections::HashMap<String, bool>,
}
#[derive(Debug, Clone, Copy)]
pub enum ExplorationMethod {
GridScan,
RandomSampling,
AdaptiveSampling,
GradientGuided,
}
#[derive(Debug, Clone)]
pub struct ParameterRegion {
pub center: Array1<f64>,
pub radius: f64,
}
#[derive(Debug, Clone)]
pub struct ParameterExplorationResult {
pub exploration_points: Vec<Array1<f64>>,
pub response_values: Vec<Array1<f64>>,
pub parameter_grid: Vec<Array1<f64>>,
pub convergence_history: Vec<Array1<f64>>,
pub exploration_method: ExplorationMethod,
pub optimization_metrics: ExplorationMetrics,
}
#[derive(Debug, Clone)]
pub struct ExplorationMetrics {
pub max_response_norm: f64,
pub min_response_norm: f64,
pub mean_response_norm: f64,
pub response_variance: f64,
pub coverage_efficiency: f64,
}
#[derive(Debug, Clone)]
pub struct AttractorInfo {
pub representative_states: Vec<f64>,
pub is_stable: bool,
pub period: usize,
}
#[derive(Debug, Clone, Copy)]
pub enum DimensionReductionMethod {
PCA,
TSNE,
UMAP,
LDA,
MDS,
}
#[derive(Debug, Clone, Copy)]
pub enum ClusteringMethod {
KMeans { k: usize },
DBSCAN { eps: f64, min_samples: usize },
Hierarchical { n_clusters: usize },
None,
}
#[derive(Debug, Clone)]
pub struct HighDimensionalPlot {
pub x: Vec<f64>,
pub y: Vec<f64>,
pub z: Option<Vec<f64>>,
pub colors: Vec<f64>,
pub cluster_labels: Option<Vec<usize>>,
pub original_dimensions: usize,
pub reduced_dimensions: usize,
pub reduction_method: DimensionReductionMethod,
pub metadata: PlotMetadata,
}
#[derive(Debug, Clone)]
pub struct AnimationSettings {
pub fps: f64,
pub loop_animation: bool,
pub interpolate_frames: bool,
pub trail_length: usize,
}
impl Default for AnimationSettings {
fn default() -> Self {
Self {
fps: 30.0,
loop_animation: true,
interpolate_frames: false,
trail_length: 50,
}
}
}
#[derive(Debug, Clone)]
pub struct FluidState {
pub velocity: Vec<Array2<f64>>,
pub pressure: Array2<f64>,
pub temperature: Option<Array2<f64>>,
pub time: f64,
pub dx: f64,
pub dy: f64,
}
#[derive(Debug, Clone)]
pub struct FluidState3D {
pub velocity: Vec<Array3<f64>>,
pub pressure: Array3<f64>,
pub temperature: Option<Array3<f64>>,
pub time: f64,
pub dx: f64,
pub dy: f64,
pub dz: f64,
}
#[derive(Debug, Clone)]
pub struct ErrorVisualizationOptions {
pub show_absolute: bool,
pub show_relative: bool,
pub show_distribution: bool,
pub show_convergence: bool,
pub error_threshold: f64,
}
impl Default for ErrorVisualizationOptions {
fn default() -> Self {
Self {
show_absolute: true,
show_relative: true,
show_distribution: true,
show_convergence: true,
error_threshold: 1e-6,
}
}
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum ErrorType {
Absolute,
Relative,
Truncation,
Roundoff,
Discretization,
}
#[derive(Debug, Clone)]
pub struct ErrorDistributionPlot {
pub bin_centers: Array1<f64>,
pub histogram: Array1<f64>,
pub error_type: ErrorType,
pub statistics: ErrorStatistics,
pub color_scheme: ColorScheme,
}
#[derive(Debug, Clone)]
pub struct ErrorStatistics {
pub mean: f64,
pub std_dev: f64,
pub min: f64,
pub max: f64,
pub median: f64,
pub percentile_95: f64,
}
#[derive(Debug, Clone)]
pub struct ConvergencePlot {
pub iterations: Array1<f64>,
pub residuals: Array1<f64>,
pub convergence_iteration: Option<usize>,
pub convergence_rate: f64,
pub theoretical_line: Option<Array1<f64>>,
pub algorithm_name: String,
pub tolerance_line: f64,
}
#[derive(Debug, Clone)]
pub struct MultiMetricConvergencePlot {
pub iterations: Array1<f64>,
pub curves: Vec<ConvergenceCurve>,
pub convergence_rates: Vec<(String, f64)>,
pub tolerance_line: f64,
}
#[derive(Debug, Clone)]
pub struct ConvergenceCurve {
pub name: String,
pub data: Array1<f64>,
pub convergence_rate: f64,
pub color: [f64; 3],
}
#[derive(Debug, Clone)]
pub struct StepSizeAnalysisPlot {
pub log_step_sizes: Array1<f64>,
pub log_errors: Array1<f64>,
pub theoretical_errors: Option<Array1<f64>>,
pub order_of_accuracy: f64,
pub method_name: String,
}
#[derive(Debug, Clone)]
pub struct PhaseDensityPlot {
pub x_grid: Array1<f64>,
pub y_grid: Array1<f64>,
pub density_grid: Array2<f64>,
pub x_bounds: (f64, f64),
pub y_bounds: (f64, f64),
pub n_points: usize,
}