1#![doc(html_favicon_url = "https://rateslib.readthedocs.io/en/stable/_static/favicon.ico")]
7#[cfg(test)]
10mod tests;
11
12pub mod json;
13use crate::json::json_py::from_json_py;
14
15use 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 m.add_function(wrap_pyfunction!(from_json_py, m)?)?;
54
55 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 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 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 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 m.add_class::<Ccy>()?;
98 m.add_class::<FXRate>()?;
99 m.add_class::<FXRates>()?;
100
101 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}