regit-svi 2.0.0

Arbitrage-free SVI volatility surfaces in pure Rust. Raw, Jump-Wings and SSVI parametrisations, calibration, and static-arbitrage checks. Zero dependencies.
Documentation
// Copyright 2026 Regit.io — Nicolas Koenig
// SPDX-License-Identifier: Apache-2.0

//! Focused SVI smiles, surfaces, calibration, and arbitrage evidence.
//!
//! The crate is organized by the market-to-model workflow: validated market
//! inputs, smile parametrisations, surfaces, calibration, arbitrage evidence,
//! and density diagnostics. Numerical implementation details are private.
//!
//! # Quick start
//!
//! ```
//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
//! use regit_svi::{Quote, calibration::quasi_explicit};
//!
//! let quotes = [
//!     Quote::new(-0.20, 0.0512, 1.0)?,
//!     Quote::new(-0.10, 0.0432, 1.0)?,
//!     Quote::new(0.00, 0.0400, 1.0)?,
//!     Quote::new(0.10, 0.0420, 1.0)?,
//!     Quote::new(0.20, 0.0480, 1.0)?,
//! ];
//! let fit = quasi_explicit::calibrate(&quotes)?;
//! assert!(fit.slice().total_variance(0.05) > 0.0);
//! # Ok(())
//! # }
//! ```

#![forbid(unsafe_code)]
#![deny(missing_docs)]

pub mod calibration;
pub mod density;
pub mod error;
pub mod market;
pub mod no_arb;
mod numerics;
pub mod smile;
pub mod surface;

pub use calibration::{
    CalibrationReport, CalibrationResult, ConstraintMode, InitializationPolicy,
    ParameterizationEvidence, PhiFamily, RawParameterMargins, ResidualDiagnostics,
    SliceCalibrationConfig, SsviCalibration, SsviMaturity, SurfaceCalibrationConfig,
    SurfaceCalibrationReport, SurfaceParameterMargins, TerminationReason,
};
pub use density::{DensityError, DensityReport};
pub use error::{CalibrationError, ConvertError, ParamError};
pub use market::conventions::{log_moneyness, total_variance_from_vol};
pub use market::quote::{Quote, SliceQuotes, quotes_from_triples};
pub use market::units::{LogMoneyness, Maturity, TotalVariance};
pub use no_arb::butterfly::ButterflyDiagnostic;
pub use no_arb::calendar::CalendarDiagnostic;
pub use no_arb::evidence::{
    ArbitrageAssessment, ArbitrageEvidence, ArbitrageStatus, DiagnosticError, RawSearchStage,
    RootEvidence, RootTermination, ScanConfig, ScanEvidence, SearchEvidence,
};
pub use smile::conversion::{jw_to_raw, raw_to_jw, ssvi_to_raw};
pub use smile::jump_wings::SviJw;
pub use smile::raw::RawSvi;
pub use surface::ssvi::{Phi, Ssvi};
pub use surface::{TermStructure, interpolation::Surface};