From e37319b63b1524be27c801961c0359d2f87616be Mon Sep 17 00:00:00 2001 From: JHM Darbyshire <24256554+attack68@users.noreply.github.com> Date: Thu, 8 Aug 2024 19:54:05 +0200 Subject: [PATCH] CI: ruff on github actions (#309) Co-authored-by: JHM Darbyshire (MacBookAir) --- .github/workflows/ubuntu-latest.yml | 8 +++++++- deprecations_2.0.md | 3 ++- src/curves/curve.rs | 5 ++--- src/curves/curve_py.rs | 21 +++++++++++++++------ src/curves/nodes.rs | 27 ++++++++++++++++----------- src/lib.rs | 2 +- 6 files changed, 43 insertions(+), 23 deletions(-) diff --git a/.github/workflows/ubuntu-latest.yml b/.github/workflows/ubuntu-latest.yml index 390423c1..e83bc3ba 100644 --- a/.github/workflows/ubuntu-latest.yml +++ b/.github/workflows/ubuntu-latest.yml @@ -30,7 +30,13 @@ jobs: run: | python -m pip install --upgrade pip pip install .[dev] -v + - name: Lint with Ruff + run: | + ruff check + - name: Ruff Format + run: | + ruff format - name: Test with pytest run: | - coverage run -m pytest + coverage run -m --source=rateslib pytest coverage report -m diff --git a/deprecations_2.0.md b/deprecations_2.0.md index 49dfe436..eea3df24 100644 --- a/deprecations_2.0.md +++ b/deprecations_2.0.md @@ -1,2 +1,3 @@ -- FixedRateBond docs calc modes in Notes section \ No newline at end of file +- FixedRateBond docs calc modes in Notes section +- PPSpline \ No newline at end of file diff --git a/src/curves/curve.rs b/src/curves/curve.rs index 5faba57d..7fc31f8e 100644 --- a/src/curves/curve.rs +++ b/src/curves/curve.rs @@ -1,8 +1,8 @@ -use crate::curves::nodes::{Nodes, NodesTimestamp}; use crate::curves::interpolation::utils::index_left; +use crate::curves::nodes::{Nodes, NodesTimestamp}; use crate::dual::{ADOrder, DualsOrF64}; use chrono::NaiveDateTime; -use pyo3::{PyErr}; +use pyo3::PyErr; /// Default struct for storing discount factors (DFs). pub struct Curve { @@ -85,7 +85,6 @@ mod tests { assert_eq!(result, DualsOrF64::F64(0.9950147597711371)) } - fn nodes_timestamp_fixture() -> NodesTimestamp { let nodes = Nodes::F64(IndexMap::from_iter(vec![ (ndt(2000, 1, 1), 1.0_f64), diff --git a/src/curves/curve_py.rs b/src/curves/curve_py.rs index b3252198..6457cab8 100644 --- a/src/curves/curve_py.rs +++ b/src/curves/curve_py.rs @@ -1,7 +1,10 @@ //! Wrapper module to export Rust curve data types to Python using pyo3 bindings. use crate::curves::nodes::{Nodes, NodesTimestamp}; -use crate::curves::{Curve, LinearInterpolator, LogLinearInterpolator, LinearZeroRateInterpolator, CurveInterpolation}; +use crate::curves::{ + Curve, CurveInterpolation, LinearInterpolator, LinearZeroRateInterpolator, + LogLinearInterpolator, +}; use crate::dual::{get_variable_tags, set_order, ADOrder, Dual, Dual2, DualsOrF64}; use chrono::NaiveDateTime; use indexmap::IndexMap; @@ -30,8 +33,8 @@ impl CurveInterpolation for CurveInterpolator { } #[pyclass(name = "Curve", module = "rateslib.rs")] -pub(crate) struct PyCurve{ - inner: Curve:: +pub(crate) struct PyCurve { + inner: Curve, } #[pymethods] @@ -57,9 +60,15 @@ impl PyCurve { fn nodes(&self) -> IndexMap { let nodes = Nodes::from(self.inner.nodes.clone()); match nodes { - Nodes::F64(i) => IndexMap::from_iter(i.into_iter().map(|(k,v)| (k, DualsOrF64::F64(v)))), - Nodes::Dual(i) => IndexMap::from_iter(i.into_iter().map(|(k,v)| (k, DualsOrF64::Dual(v)))), - Nodes::Dual2(i) => IndexMap::from_iter(i.into_iter().map(|(k,v)| (k, DualsOrF64::Dual2(v)))), + Nodes::F64(i) => { + IndexMap::from_iter(i.into_iter().map(|(k, v)| (k, DualsOrF64::F64(v)))) + } + Nodes::Dual(i) => { + IndexMap::from_iter(i.into_iter().map(|(k, v)| (k, DualsOrF64::Dual(v)))) + } + Nodes::Dual2(i) => { + IndexMap::from_iter(i.into_iter().map(|(k, v)| (k, DualsOrF64::Dual2(v)))) + } } } diff --git a/src/curves/nodes.rs b/src/curves/nodes.rs index ee9b1e30..64a0d373 100644 --- a/src/curves/nodes.rs +++ b/src/curves/nodes.rs @@ -1,5 +1,5 @@ use crate::dual::{Dual, Dual2}; -use chrono::{NaiveDateTime, DateTime}; +use chrono::{DateTime, NaiveDateTime}; use indexmap::IndexMap; /// Datetime indexed values of a specific [ADOrder](`crate::dual::ADOrder`). @@ -35,20 +35,25 @@ impl From for NodesTimestamp { impl From for Nodes { fn from(value: NodesTimestamp) -> Self { match value { - NodesTimestamp::F64(m) => Nodes::F64(IndexMap::from_iter( - m.into_iter().map(|(k, v)| (DateTime::from_timestamp(k, 0).unwrap().naive_utc(), v)), - )), - NodesTimestamp::Dual(m) => Nodes::Dual(IndexMap::from_iter( - m.into_iter().map(|(k, v)| (DateTime::from_timestamp(k, 0).unwrap().naive_utc(), v)), - )), - NodesTimestamp::Dual2(m) => Nodes::Dual2(IndexMap::from_iter( - m.into_iter().map(|(k, v)| (DateTime::from_timestamp(k, 0).unwrap().naive_utc(), v)), - )), + NodesTimestamp::F64(m) => { + Nodes::F64(IndexMap::from_iter(m.into_iter().map(|(k, v)| { + (DateTime::from_timestamp(k, 0).unwrap().naive_utc(), v) + }))) + } + NodesTimestamp::Dual(m) => { + Nodes::Dual(IndexMap::from_iter(m.into_iter().map(|(k, v)| { + (DateTime::from_timestamp(k, 0).unwrap().naive_utc(), v) + }))) + } + NodesTimestamp::Dual2(m) => { + Nodes::Dual2(IndexMap::from_iter(m.into_iter().map(|(k, v)| { + (DateTime::from_timestamp(k, 0).unwrap().naive_utc(), v) + }))) + } } } } - impl NodesTimestamp { // fn keys_as_f64(&self) -> Vec { // match self { diff --git a/src/lib.rs b/src/lib.rs index 932a56b5..5e37f172 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -24,9 +24,9 @@ use splines::spline_py::{ }; pub mod curves; +use curves::curve_py::PyCurve; use curves::interpolation::interpolation_py::index_left_f64; use curves::{LinearInterpolator, LinearZeroRateInterpolator, LogLinearInterpolator}; -use curves::curve_py::PyCurve; pub mod calendars; use calendars::calendar_py::get_calendar_by_name_py;