finlib 0.0.10

Quant finance functions implemented in Rust
Documentation
use crate::curve::curve::{Curve, CurveType};
use crate::curve::point::CurvePoint;
use crate::price::price::PricePair;
use pyo3::prelude::*;
use pyo3::types::PyDate;

#[pymethods]
impl Curve {
    #[new]
    pub fn init(curve_type: CurveType) -> Self {
        Self::new(curve_type)
    }

    #[pyo3(name = "size")]
    pub fn size_py(&mut self) -> PyResult<usize> {
        Ok(self.size())
    }

    pub fn __len__(&self) -> usize {
        self.size()
    }

    #[pyo3(name = "add_rate")]
    pub fn add_rate_py(&mut self, point: CurvePoint) -> PyResult<()> {
        self.add_rate(point);
        Ok(())
    }

    #[pyo3(name = "add_rate_from")]
    pub fn add_rate_from_py(
        &mut self,
        bid: f64,
        offer: f64,
        date: &Bound<'_, PyDate>,
    ) -> PyResult<()> {
        self.add_rate_from(bid, offer, date.extract()?);
        Ok(())
    }

    #[pyo3(name = "get_cumulative_rate")]
    pub fn get_cumulative_rate_py(
        &mut self,
        at: &Bound<'_, PyDate>,
    ) -> PyResult<Option<PricePair>> {
        Ok(self.get_cumulative_rate(at.extract()?))
    }

    #[pyo3(name = "get_absolute_rate")]
    pub fn get_absolute_rate_py(&mut self, at: &Bound<'_, PyDate>) -> PyResult<Option<PricePair>> {
        Ok(self.get_absolute_rate(at.extract()?))
    }

    #[pyo3(name = "get_rate")]
    pub fn get_rate_py(&mut self, at: &Bound<'_, PyDate>) -> PyResult<Option<PricePair>> {
        Ok(self.get_rate(at.extract()?))
    }

    #[pyo3(name = "get_carry_rate")]
    pub fn get_carry_rate_py(
        &mut self,
        from: &Bound<'_, PyDate>,
        to: &Bound<'_, PyDate>,
    ) -> PyResult<Option<PricePair>> {
        Ok(self.get_carry_rate(from.extract()?, to.extract()?))
    }
}

#[pymethods]
impl CurvePoint {
    #[new]
    pub fn init(bid: f64, offer: f64, date: &Bound<'_, PyDate>) -> Self {
        Self {
            bid_rate: bid,
            offer_rate: offer,
            date: date.extract().unwrap(),
        }
    }
}