picard/
lib.rs

1//! # Picard
2//!
3//! Fast Independent Component Analysis using preconditioned L-BFGS optimization.
4//!
5//! This crate implements the Picard algorithm from:
6//!
7//! > Pierre Ablin, Jean-François Cardoso, Alexandre Gramfort.
8//! > "Faster independent component analysis by preconditioning with Hessian approximations"
9//! > IEEE Transactions on Signal Processing, 2018
10//!
11//! ## Example
12//!
13//! ```rust,no_run
14//! use picard::{Picard, PicardConfig};
15//! use ndarray::Array2;
16//!
17//! # fn main() -> Result<(), picard::PicardError> {
18//! // Generate some test data (n_features x n_samples)
19//! let x = Array2::<f64>::zeros((10, 1000));
20//!
21//! // Fit ICA with default settings
22//! let result = Picard::fit(&x)?;
23//!
24//! // Or with custom configuration
25//! let config = PicardConfig::builder()
26//!     .n_components(5)
27//!     .max_iter(200)
28//!     .ortho(true)
29//!     .build();
30//! let result = Picard::fit_with_config(&x, &config)?;
31//!
32//! // Access results
33//! let sources = &result.sources;
34//! let unmixing = &result.unmixing;
35//! # Ok(())
36//! # }
37//! ```
38
39mod config;
40mod core;
41mod density;
42mod error;
43mod jade;
44mod lbfgs;
45mod math;
46mod result;
47mod solver;
48mod whitening;
49
50pub use config::{ConfigBuilder, PicardConfig};
51pub use density::{Cube, Density, DensityType, Exp, Tanh};
52pub use error::PicardError;
53pub use result::PicardResult;
54pub use solver::Picard;
55
56// Utility functions
57pub mod utils;
58
59// Re-export ndarray for convenience
60pub use ndarray;