From 03b9f69a015b0fce1cbab31a91cdea5acdc92493 Mon Sep 17 00:00:00 2001 From: gusto Date: Mon, 11 Sep 2023 14:29:54 +0300 Subject: [PATCH] Simulations: make polars dependancy optional (#385) * Remove explicit target * Use default profile for windows build * Use stable-gnu for tests * Make polars optional feature in simulations * Remove unnecessary ci debug steps --- .github/workflows/master.yml | 7 ------- .github/workflows/pr.yml | 7 ------- simulations/Cargo.toml | 7 +++++-- simulations/src/bin/app/main.rs | 7 ++++--- simulations/src/bin/app/overlay_node.rs | 1 + simulations/src/node/carnot/timeout.rs | 3 +++ simulations/src/streaming/mod.rs | 5 +++++ 7 files changed, 18 insertions(+), 19 deletions(-) diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index 11534685..b2ff0d9d 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -49,7 +49,6 @@ jobs: if: matrix.os == 'windows-latest' uses: actions-rs/toolchain@v1 with: - profile: minimal toolchain: stable-gnu target: x86_64-pc-windows-gnu override: true @@ -65,12 +64,6 @@ jobs: with: command: build args: --all --no-default-features --features ${{ matrix.feature }} - # Freeup some space for Windows tests - - name: Clean target dir (Windows) - if: matrix.os == 'windows-latest' - uses: actions-rs/cargo@v1 - with: - command: clean - uses: actions-rs/cargo@v1 with: command: test diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 210d352f..06fc51e7 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -50,7 +50,6 @@ jobs: if: matrix.os == 'windows-latest' uses: actions-rs/toolchain@v1 with: - profile: minimal toolchain: stable-gnu target: x86_64-pc-windows-gnu override: true @@ -66,12 +65,6 @@ jobs: with: command: build args: --all --no-default-features --features ${{ matrix.feature }} - # Freeup some space for Windows tests - - name: Clean target dir (Windows) - if: matrix.os == 'windows-latest' - uses: actions-rs/cargo@v1 - with: - command: clean - uses: actions-rs/cargo@v1 with: command: test diff --git a/simulations/Cargo.toml b/simulations/Cargo.toml index 88ecdf10..13f15958 100644 --- a/simulations/Cargo.toml +++ b/simulations/Cargo.toml @@ -28,7 +28,7 @@ nomos-core = { path = "../nomos-core" } nomos-consensus = { path = "../nomos-services/consensus" } once_cell = "1.17" parking_lot = "0.12" -polars = { version = "0.27", features = ["serde", "object", "json", "csv-file", "parquet", "dtype-struct"] } +polars = { version = "0.27", features = ["serde", "object", "json", "csv-file", "parquet", "dtype-struct"], optional = true } rand = { version = "0.8", features = ["small_rng"] } rayon = "1.7" scopeguard = "1" @@ -43,4 +43,7 @@ tracing-subscriber = { version = "0.3", features = ["env-filter", "tracing-log"] getrandom = { version = "0.2", features = ["js"] } [dev-dependencies] -tempfile = "3.4" \ No newline at end of file +tempfile = "3.4" + +[features] +polars = ["dep:polars"] diff --git a/simulations/src/bin/app/main.rs b/simulations/src/bin/app/main.rs index 302b83ec..ae1749ae 100644 --- a/simulations/src/bin/app/main.rs +++ b/simulations/src/bin/app/main.rs @@ -23,9 +23,9 @@ use simulations::node::carnot::{CarnotRecord, CarnotSettings, CarnotState}; use simulations::node::{NodeId, NodeIdExt}; use simulations::output_processors::Record; use simulations::runner::{BoxedNode, SimulationRunnerHandle}; -use simulations::streaming::{ - io::IOSubscriber, naive::NaiveSubscriber, polars::PolarsSubscriber, StreamType, -}; +#[cfg(feature = "polars")] +use simulations::streaming::polars::PolarsSubscriber; +use simulations::streaming::{io::IOSubscriber, naive::NaiveSubscriber, StreamType}; // internal use simulations::{runner::SimulationRunner, settings::SimulationSettings}; mod log; @@ -163,6 +163,7 @@ where let settings = stream_settings.unwrap_io(); runner.simulate_and_subscribe::>(settings)? } + #[cfg(feature = "polars")] Some(StreamType::Polars) => { let settings = stream_settings.unwrap_polars(); runner.simulate_and_subscribe::>(settings)? diff --git a/simulations/src/bin/app/overlay_node.rs b/simulations/src/bin/app/overlay_node.rs index 7389d671..ad7f4efb 100644 --- a/simulations/src/bin/app/overlay_node.rs +++ b/simulations/src/bin/app/overlay_node.rs @@ -25,6 +25,7 @@ pub fn to_overlay_node( simulations::streaming::StreamSettings::IO(_) => { simulations::streaming::SubscriberFormat::Csv } + #[cfg(feature = "polars")] simulations::streaming::StreamSettings::Polars(p) => p.format, }; match &settings.overlay_settings { diff --git a/simulations/src/node/carnot/timeout.rs b/simulations/src/node/carnot/timeout.rs index c3fb67ba..0e5683c8 100644 --- a/simulations/src/node/carnot/timeout.rs +++ b/simulations/src/node/carnot/timeout.rs @@ -1,5 +1,8 @@ use consensus_engine::View; +#[cfg(feature = "polars")] use polars::export::ahash::HashMap; +#[cfg(not(feature = "polars"))] +use std::collections::HashMap; use std::time::Duration; pub(crate) struct TimeoutHandler { diff --git a/simulations/src/streaming/mod.rs b/simulations/src/streaming/mod.rs index 2ca6d79f..946cf940 100644 --- a/simulations/src/streaming/mod.rs +++ b/simulations/src/streaming/mod.rs @@ -11,6 +11,7 @@ use crate::output_processors::{Record, RecordType, Runtime}; pub mod io; pub mod naive; +#[cfg(feature = "polars")] pub mod polars; pub mod runtime_subscriber; pub mod settings_subscriber; @@ -83,6 +84,7 @@ pub enum StreamType { #[default] IO, Naive, + #[cfg(feature = "polars")] Polars, } @@ -93,6 +95,7 @@ impl FromStr for StreamType { match s.trim().to_ascii_lowercase().as_str() { "io" => Ok(Self::IO), "naive" => Ok(Self::Naive), + #[cfg(feature = "polars")] "polars" => Ok(Self::Polars), tag => Err(format!( "Invalid {tag} streaming type, only [naive, polars] are supported", @@ -116,6 +119,7 @@ impl<'de> serde::Deserialize<'de> for StreamType { pub enum StreamSettings { Naive(naive::NaiveSettings), IO(io::IOStreamSettings), + #[cfg(feature = "polars")] Polars(polars::PolarsSettings), } @@ -140,6 +144,7 @@ impl StreamSettings { } } + #[cfg(feature = "polars")] pub fn unwrap_polars(self) -> polars::PolarsSettings { match self { StreamSettings::Polars(settings) => settings,