rcompat_lbfgsb/lib.rs
1//! Clean-room Rust implementation of R-compatible
2//! `stats::optim(..., method = "L-BFGS-B")` semantics.
3//!
4//! The crate focuses on R-style wrapper behavior: `fnscale`, `parscale`,
5//! `ndeps`, bounds, optional gradients, typed errors, and R-like result fields.
6//! It does not call R at runtime.
7//!
8//! ```
9//! use rcompat_lbfgsb::{optim_lbfgsb, Bounds, OptimControl};
10//!
11//! let result = optim_lbfgsb(
12//! vec![0.0],
13//! Bounds::new(vec![-10.0], vec![10.0])?,
14//! |p| (p[0] - 2.0).powi(2),
15//! OptimControl::default_for_dimension(1),
16//! )?;
17//!
18//! assert!((result.par[0] - 2.0).abs() < 1e-5);
19//! # Ok::<(), rcompat_lbfgsb::OptimError>(())
20//! ```
21
22#![forbid(unsafe_code)]
23#![warn(missing_docs)]
24#![warn(rust_2018_idioms)]
25
26mod backend;
27mod bounds;
28mod compat;
29mod control;
30mod error;
31mod finite_diff;
32mod objective;
33mod result;
34mod scaling;
35
36pub use bounds::Bounds;
37pub use compat::{optim_lbfgsb, optim_lbfgsb_with_gradient};
38pub use control::OptimControl;
39pub use error::OptimError;
40pub use result::{OptimCounts, OptimResult};