1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//! Output module for simulation results
//!
//! This module provides tools to output simulation results in various formats:
//! - **Visualization**: PNG/SVG plots using plotters
//! - **Export**: CSV/JSON data export for external analysis
//!
//! # Architecture
//!
//! ```text
//! output/
//! ├── mod.rs ← This file
//! ├── visualization/ ← Plots and graphics
//! │ ├── mod.rs
//! │ └── steady.rs
//! └── export/ ← Data export
//! ├── mod.rs
//! └── csv.rs
//! ```
//!
//! # Quick Start
//!
//! ## Visualization
//!
//! ```rust
//! use chrom_rs::output::visualization::{plot_chromatogram, PlotConfig};
//! use chrom_rs::solver::SimulationResult;
//! use chrom_rs::physics::{PhysicalState, PhysicalQuantity, PhysicalData};
//!
//! # let state = PhysicalState::new(PhysicalQuantity::Concentration, PhysicalData::Scalar(0.0));
//! # let result = SimulationResult::new(vec![0.0, 1.0], vec![state.clone(), state.clone()], state);
//! // Generate PNG plot
//! let _ = plot_chromatogram(&result, 100, "/tmp/output.png", None);
//! ```
//!
//! ## CSV Export
//!
//! ```rust
//! use chrom_rs::output::export::{CsvExporter, CsvConfig, Exporter};
//! use chrom_rs::solver::SimulationResult;
//! use chrom_rs::physics::{PhysicalState, PhysicalQuantity, PhysicalData};
//!
//! # let state = PhysicalState::new(PhysicalQuantity::Concentration, PhysicalData::Scalar(0.0));
//! # let result = SimulationResult::new(vec![0.0, 1.0], vec![state.clone(), state.clone()], state);
//! let exporter = CsvExporter::default();
//!
//! // Export to CSV
//! let _ = exporter.export_single(&result, None, "/tmp/data.csv");
//! ```
//!
//! # Design Philosophy
//!
//! The output module separates concerns:
//! - **Visualization**: For human interpretation (plots, graphs)
//! - **Export**: For programmatic analysis (CSV, JSON, HDF5)
//!
//! Both submodules accept simple `&[f64]` slices for maximum flexibility.
//!
//! # Version History
//!
//! - **v0.1.0**: Static plots (PNG/SVG) and CSV export
//! - **v0.2.0+**: Animations, HDF5, JSON export (planned)
//!
//! # Examples
//!
//! See `examples/` directory for complete workflows:
//! - `examples/output_demo.rs` - Complete output pipeline
//! - `examples/tfa_export.rs` - TFA chromatogram export
// Re-export commonly used items for convenience
pub use ;
pub use ;