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
50pub mod enums;
51use enums::PyFloatFixingMethod;
52
53#[pymodule]
54fn rs(m: &Bound<'_, PyModule>) -> PyResult<()> {
55    // JSON
56    m.add_function(wrap_pyfunction!(from_json_py, m)?)?;
57
58    // Automatic Differentiation
59    m.add_class::<Dual>()?;
60    m.add_class::<Dual2>()?;
61    m.add_class::<ADOrder>()?;
62    m.add_function(wrap_pyfunction!(dsolve1_py, m)?)?;
63    m.add_function(wrap_pyfunction!(dsolve2_py, m)?)?;
64    m.add_function(wrap_pyfunction!(fdsolve1_py, m)?)?;
65    m.add_function(wrap_pyfunction!(fdsolve2_py, m)?)?;
66
67    // Splines
68    m.add_class::<PPSplineF64>()?;
69    m.add_class::<PPSplineDual>()?;
70    m.add_class::<PPSplineDual2>()?;
71    m.add_function(wrap_pyfunction!(bsplev_single, m)?)?;
72    m.add_function(wrap_pyfunction!(bspldnev_single, m)?)?;
73
74    // Curves
75    m.add_class::<Curve>()?;
76    m.add_class::<Modifier>()?;
77    m.add_function(wrap_pyfunction!(index_left_f64, m)?)?;
78    m.add_class::<FlatBackwardInterpolator>()?;
79    m.add_class::<FlatForwardInterpolator>()?;
80    m.add_class::<LinearInterpolator>()?;
81    m.add_class::<LogLinearInterpolator>()?;
82    m.add_class::<LinearZeroRateInterpolator>()?;
83    m.add_class::<NullInterpolator>()?;
84
85    // Scheduling
86    m.add_class::<Cal>()?;
87    m.add_class::<UnionCal>()?;
88    m.add_class::<NamedCal>()?;
89    m.add_class::<Convention>()?;
90    m.add_class::<PyAdjuster>()?;
91    m.add_function(wrap_pyfunction!(_get_modifier_str, m)?)?;
92
93    m.add_class::<Frequency>()?;
94    m.add_class::<RollDay>()?;
95    m.add_class::<Imm>()?;
96    m.add_class::<StubInference>()?;
97    m.add_class::<Schedule>()?;
98
99    // FX
100    m.add_class::<Ccy>()?;
101    m.add_class::<FXRate>()?;
102    m.add_class::<FXRates>()?;
103
104    // FX Volatility
105    m.add_function(wrap_pyfunction!(_sabr_x0, m)?)?;
106    m.add_function(wrap_pyfunction!(_sabr_x1, m)?)?;
107    m.add_function(wrap_pyfunction!(_sabr_x2, m)?)?;
108
109    // Rates and Indexes
110    m.add_class::<PyFloatFixingMethod>()?;
111
112    Ok(())
113}