rateslib/
lib.rs

1//! This is the documentation for rateslib-rs
2//!
3//! <div class="warning">This library is in development. Only parts of *rateslib (Python)* have been ported
4//! successfully, completely and with sound documentation to Rust.</div>
5
6#![doc(html_favicon_url = "https://rateslib.readthedocs.io/en/stable/_static/favicon.ico")]
7// #![doc(html_logo_url = "https://rateslib.readthedocs.io/en/stable/_static/rateslib_logo2a.png")]
8
9#[cfg(test)]
10mod tests;
11
12pub mod json;
13use crate::json::json_py::from_json_py;
14
15// type GenericError = Box<dyn std::error::Error + Send + Sync + 'static>;
16// type GenericResult<T> = Result<T, GenericError>;
17
18use pyo3::prelude::*;
19
20pub mod dual;
21use dual::linalg_py::{dsolve1_py, dsolve2_py, fdsolve1_py, fdsolve2_py};
22use dual::{ADOrder, Dual, Dual2};
23
24pub mod splines;
25use splines::spline_py::{bspldnev_single, bsplev_single};
26use splines::{PPSplineDual, PPSplineDual2, PPSplineF64};
27
28pub mod curves;
29use curves::curve_py::Curve;
30use curves::interpolation::interpolation_py::index_left_f64;
31use curves::{
32    FlatBackwardInterpolator, FlatForwardInterpolator, LinearInterpolator,
33    LinearZeroRateInterpolator, LogLinearInterpolator, Modifier, NullInterpolator,
34    _get_modifier_str,
35};
36
37pub mod fx;
38use fx::rates::ccy::Ccy;
39use fx::rates::{FXRate, FXRates};
40
41pub mod fx_volatility;
42use fx_volatility::sabr_funcs::{_sabr_x0, _sabr_x1, _sabr_x2};
43
44pub mod scheduling;
45use scheduling::{
46    Cal, Convention, Frequency, Imm, NamedCal, PyAdjuster, RollDay, Schedule, StubInference,
47    UnionCal,
48};
49
50#[pymodule]
51fn rs(m: &Bound<'_, PyModule>) -> PyResult<()> {
52    // JSON
53    m.add_function(wrap_pyfunction!(from_json_py, m)?)?;
54
55    // Automatic Differentiation
56    m.add_class::<Dual>()?;
57    m.add_class::<Dual2>()?;
58    m.add_class::<ADOrder>()?;
59    m.add_function(wrap_pyfunction!(dsolve1_py, m)?)?;
60    m.add_function(wrap_pyfunction!(dsolve2_py, m)?)?;
61    m.add_function(wrap_pyfunction!(fdsolve1_py, m)?)?;
62    m.add_function(wrap_pyfunction!(fdsolve2_py, m)?)?;
63
64    // Splines
65    m.add_class::<PPSplineF64>()?;
66    m.add_class::<PPSplineDual>()?;
67    m.add_class::<PPSplineDual2>()?;
68    m.add_function(wrap_pyfunction!(bsplev_single, m)?)?;
69    m.add_function(wrap_pyfunction!(bspldnev_single, m)?)?;
70
71    // Curves
72    m.add_class::<Curve>()?;
73    m.add_class::<Modifier>()?;
74    m.add_function(wrap_pyfunction!(index_left_f64, m)?)?;
75    m.add_class::<FlatBackwardInterpolator>()?;
76    m.add_class::<FlatForwardInterpolator>()?;
77    m.add_class::<LinearInterpolator>()?;
78    m.add_class::<LogLinearInterpolator>()?;
79    m.add_class::<LinearZeroRateInterpolator>()?;
80    m.add_class::<NullInterpolator>()?;
81
82    // Scheduling
83    m.add_class::<Cal>()?;
84    m.add_class::<UnionCal>()?;
85    m.add_class::<NamedCal>()?;
86    m.add_class::<Convention>()?;
87    m.add_class::<PyAdjuster>()?;
88    m.add_function(wrap_pyfunction!(_get_modifier_str, m)?)?;
89
90    m.add_class::<Frequency>()?;
91    m.add_class::<RollDay>()?;
92    m.add_class::<Imm>()?;
93    m.add_class::<StubInference>()?;
94    m.add_class::<Schedule>()?;
95
96    // FX
97    m.add_class::<Ccy>()?;
98    m.add_class::<FXRate>()?;
99    m.add_class::<FXRates>()?;
100
101    // FX Volatility
102    m.add_function(wrap_pyfunction!(_sabr_x0, m)?)?;
103    m.add_function(wrap_pyfunction!(_sabr_x1, m)?)?;
104    m.add_function(wrap_pyfunction!(_sabr_x2, m)?)?;
105
106    Ok(())
107}