diff --git a/src/panel/mod.rs b/src/panel/mod.rs new file mode 100644 index 0000000..a2846e8 --- /dev/null +++ b/src/panel/mod.rs @@ -0,0 +1,3 @@ +pub mod historic_vol; + + diff --git a/src/py/mod.rs b/src/py/mod.rs index 93b7ac1..c65391b 100644 --- a/src/py/mod.rs +++ b/src/py/mod.rs @@ -5,6 +5,9 @@ pub mod qdf; /// Python API for [`crate::download`]. pub mod download; +/// Python API for [`crate::panel`]. +pub mod panel; + use pyo3::{prelude::*, wrap_pymodule}; // use pyo3_polars::PyDataFrame; @@ -13,5 +16,6 @@ use pyo3::{prelude::*, wrap_pymodule}; pub fn msyrs(_py: Python, m: &PyModule) -> PyResult<()> { m.add_wrapped(wrap_pymodule!(qdf::qdf))?; m.add_wrapped(wrap_pymodule!(download::download))?; + m.add_wrapped(wrap_pymodule!(panel::panel))?; Ok(()) } diff --git a/src/py/panel.rs b/src/py/panel.rs new file mode 100644 index 0000000..1e0ebfe --- /dev/null +++ b/src/py/panel.rs @@ -0,0 +1,46 @@ +use pyo3::prelude::*; +use pyo3_polars::PyDataFrame; + +/// Python wrapper for [`crate::panel`] module. +#[allow(deprecated)] +#[pymodule] +pub fn panel(_py: Python, m: &PyModule) -> PyResult<()> { + m.add_function(wrap_pyfunction!(historic_vol, m)?)?; + Ok(()) +} + +/// Python wrapper for calculating historic volatility. +/// See [`crate::panel::historic_vol`] for full documentation. +#[pyfunction] +pub fn historic_vol( + df: PyDataFrame, + xcat: String, + cids: Option>, + lback_periods: Option, + lback_method: Option, + half_life: Option, + start: Option, + end: Option, + est_freq: Option, + remove_zeros: Option, + postfix: Option, + nan_tolerance: Option, +) -> PyResult { + Ok(PyDataFrame( + crate::panel::historic_vol::historic_vol( + df.into(), + xcat, + cids, + lback_periods, + lback_method, + half_life, + start, + end, + est_freq, + remove_zeros, + postfix, + nan_tolerance, + ) + .unwrap(), + )) +}