From a29abe85fb65e23e912ba2726a0d62994558d6a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Lafage?= Date: Sat, 30 Mar 2024 18:56:31 +0100 Subject: [PATCH] Build fixes (#333) * Bump MSRV to 1.70 * Rename examples to avoid name collisions * Fix clippy errors * Remove Result alias to avoid glob export collisions * Revert Criterion import for non windows --- .github/workflows/checking.yml | 2 +- .github/workflows/codequality.yml | 2 +- .github/workflows/testing.yml | 4 ++-- .../{winequality.rs => winequality_bayes.rs} | 0 algorithms/linfa-bayes/src/gaussian_nb.rs | 2 +- algorithms/linfa-bayes/src/multinomial_nb.rs | 2 +- .../src/gaussian_mixture/algorithm.rs | 14 +++++++------- .../src/gaussian_mixture/errors.rs | 1 - .../src/gaussian_mixture/hyperparams.rs | 6 +++--- algorithms/linfa-clustering/src/optics/errors.rs | 1 - .../linfa-clustering/src/optics/hyperparams.rs | 6 +++--- .../{winequality.rs => winequality_ftrl.rs} | 0 .../{winequality.rs => winequality_logistic.rs} | 0 ...lity_multi.rs => winequality_multi_logistic.rs} | 0 ...nequality_multi.rs => winequality_multi_svm.rs} | 0 .../{winequality.rs => winequality_svm.rs} | 0 src/benchmarks/mod.rs | 4 +++- 17 files changed, 22 insertions(+), 22 deletions(-) rename algorithms/linfa-bayes/examples/{winequality.rs => winequality_bayes.rs} (100%) rename algorithms/linfa-ftrl/examples/{winequality.rs => winequality_ftrl.rs} (100%) rename algorithms/linfa-logistic/examples/{winequality.rs => winequality_logistic.rs} (100%) rename algorithms/linfa-logistic/examples/{winequality_multi.rs => winequality_multi_logistic.rs} (100%) rename algorithms/linfa-svm/examples/{winequality_multi.rs => winequality_multi_svm.rs} (100%) rename algorithms/linfa-svm/examples/{winequality.rs => winequality_svm.rs} (100%) diff --git a/.github/workflows/checking.yml b/.github/workflows/checking.yml index 9537f82ec..1a18fe81f 100644 --- a/.github/workflows/checking.yml +++ b/.github/workflows/checking.yml @@ -10,7 +10,7 @@ jobs: fail-fast: false matrix: toolchain: - - 1.67.0 + - 1.70.0 - stable - nightly os: diff --git a/.github/workflows/codequality.yml b/.github/workflows/codequality.yml index f17f42e1f..641069350 100644 --- a/.github/workflows/codequality.yml +++ b/.github/workflows/codequality.yml @@ -10,7 +10,7 @@ jobs: strategy: matrix: toolchain: - - 1.67.0 + - 1.70.0 - stable steps: diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 9f3a8c091..22f075b94 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -10,7 +10,7 @@ jobs: fail-fast: false matrix: toolchain: - - 1.67.0 + - 1.70.0 - stable os: - ubuntu-latest @@ -35,7 +35,7 @@ jobs: fail-fast: false matrix: toolchain: - - 1.67.0 + - 1.70.0 - stable os: - ubuntu-latest diff --git a/algorithms/linfa-bayes/examples/winequality.rs b/algorithms/linfa-bayes/examples/winequality_bayes.rs similarity index 100% rename from algorithms/linfa-bayes/examples/winequality.rs rename to algorithms/linfa-bayes/examples/winequality_bayes.rs diff --git a/algorithms/linfa-bayes/src/gaussian_nb.rs b/algorithms/linfa-bayes/src/gaussian_nb.rs index 56677b9cb..eeaec2841 100644 --- a/algorithms/linfa-bayes/src/gaussian_nb.rs +++ b/algorithms/linfa-bayes/src/gaussian_nb.rs @@ -84,7 +84,7 @@ where let nclass = xclass.nrows(); // We compute the update of the gaussian mean and variance - let mut class_info = model + let class_info = model .class_info .entry(class) .or_insert_with(GaussianClassInfo::default); diff --git a/algorithms/linfa-bayes/src/multinomial_nb.rs b/algorithms/linfa-bayes/src/multinomial_nb.rs index f8fc12924..106a0c1d3 100644 --- a/algorithms/linfa-bayes/src/multinomial_nb.rs +++ b/algorithms/linfa-bayes/src/multinomial_nb.rs @@ -71,7 +71,7 @@ where let nclass = xclass.nrows(); // We compute the feature log probabilities and feature counts on the slice corresponding to the current class - let mut class_info = model + let class_info = model .class_info .entry(class) .or_insert_with(MultinomialClassInfo::default); diff --git a/algorithms/linfa-clustering/src/gaussian_mixture/algorithm.rs b/algorithms/linfa-clustering/src/gaussian_mixture/algorithm.rs index 6f23485a0..c0f7a1c04 100644 --- a/algorithms/linfa-clustering/src/gaussian_mixture/algorithm.rs +++ b/algorithms/linfa-clustering/src/gaussian_mixture/algorithm.rs @@ -1,4 +1,4 @@ -use crate::gaussian_mixture::errors::{GmmError, Result}; +use crate::gaussian_mixture::errors::GmmError; use crate::gaussian_mixture::hyperparams::{ GmmCovarType, GmmInitMethod, GmmParams, GmmValidParams, }; @@ -126,7 +126,7 @@ impl GaussianMixtureModel { hyperparameters: &GmmValidParams, dataset: &DatasetBase, T>, mut rng: R, - ) -> Result> { + ) -> Result, GmmError> { let observations = dataset.records().view(); let n_samples = observations.nrows(); @@ -216,7 +216,7 @@ impl GaussianMixtureModel { resp: &Array2, _covar_type: &GmmCovarType, reg_covar: F, - ) -> Result<(Array1, Array2, Array3)> { + ) -> Result<(Array1, Array2, Array3), GmmError> { let nk = resp.sum_axis(Axis(0)); if nk.min()? < &(F::cast(10.) * F::epsilon()) { return Err(GmmError::EmptyCluster(format!( @@ -255,7 +255,7 @@ impl GaussianMixtureModel { fn compute_precisions_cholesky_full>( covariances: &ArrayBase, - ) -> Result> { + ) -> Result, GmmError> { let n_clusters = covariances.shape()[0]; let n_features = covariances.shape()[1]; let mut precisions_chol = Array::zeros((n_clusters, n_features, n_features)); @@ -290,7 +290,7 @@ impl GaussianMixtureModel { fn e_step>( &self, observations: &ArrayBase, - ) -> Result<(F, Array2)> { + ) -> Result<(F, Array2), GmmError> { let (log_prob_norm, log_resp) = self.estimate_log_prob_resp(observations); let log_mean = log_prob_norm.mean().unwrap(); Ok((log_mean, log_resp)) @@ -301,7 +301,7 @@ impl GaussianMixtureModel { reg_covar: F, observations: &ArrayBase, log_resp: &Array2, - ) -> Result<()> { + ) -> Result<(), GmmError> { let n_samples = observations.nrows(); let (weights, means, covariances) = Self::estimate_gaussian_parameters( observations, @@ -407,7 +407,7 @@ impl, T> Fit, T, G { type Object = GaussianMixtureModel; - fn fit(&self, dataset: &DatasetBase, T>) -> Result { + fn fit(&self, dataset: &DatasetBase, T>) -> Result { let observations = dataset.records().view(); let mut gmm = GaussianMixtureModel::::new(self, dataset, self.rng())?; diff --git a/algorithms/linfa-clustering/src/gaussian_mixture/errors.rs b/algorithms/linfa-clustering/src/gaussian_mixture/errors.rs index bc5a82830..605cff630 100644 --- a/algorithms/linfa-clustering/src/gaussian_mixture/errors.rs +++ b/algorithms/linfa-clustering/src/gaussian_mixture/errors.rs @@ -4,7 +4,6 @@ use linfa_linalg::LinalgError; #[cfg(feature = "blas")] use ndarray_linalg::error::LinalgError; use thiserror::Error; -pub type Result = std::result::Result; /// An error when modeling a GMM algorithm #[derive(Error, Debug)] diff --git a/algorithms/linfa-clustering/src/gaussian_mixture/hyperparams.rs b/algorithms/linfa-clustering/src/gaussian_mixture/hyperparams.rs index 5f9a07b1a..be67b6fd0 100644 --- a/algorithms/linfa-clustering/src/gaussian_mixture/hyperparams.rs +++ b/algorithms/linfa-clustering/src/gaussian_mixture/hyperparams.rs @@ -1,4 +1,4 @@ -use crate::gaussian_mixture::errors::{GmmError, Result}; +use crate::gaussian_mixture::errors::GmmError; use ndarray_rand::rand::{Rng, SeedableRng}; use rand_xoshiro::Xoshiro256Plus; #[cfg(feature = "serde")] @@ -170,7 +170,7 @@ impl ParamGuard for GmmParams { type Checked = GmmValidParams; type Error = GmmError; - fn check_ref(&self) -> Result<&Self::Checked> { + fn check_ref(&self) -> Result<&Self::Checked, GmmError> { if self.0.n_clusters == 0 { Err(GmmError::InvalidValue( "`n_clusters` cannot be 0!".to_string(), @@ -194,7 +194,7 @@ impl ParamGuard for GmmParams { } } - fn check(self) -> Result { + fn check(self) -> Result { self.check_ref()?; Ok(self.0) } diff --git a/algorithms/linfa-clustering/src/optics/errors.rs b/algorithms/linfa-clustering/src/optics/errors.rs index b360c16cd..bf2ac7405 100644 --- a/algorithms/linfa-clustering/src/optics/errors.rs +++ b/algorithms/linfa-clustering/src/optics/errors.rs @@ -1,5 +1,4 @@ use thiserror::Error; -pub type Result = std::result::Result; /// An error when performing OPTICS Analysis #[derive(Error, Debug)] diff --git a/algorithms/linfa-clustering/src/optics/hyperparams.rs b/algorithms/linfa-clustering/src/optics/hyperparams.rs index 13fd0eb61..fe13d373f 100644 --- a/algorithms/linfa-clustering/src/optics/hyperparams.rs +++ b/algorithms/linfa-clustering/src/optics/hyperparams.rs @@ -1,4 +1,4 @@ -use crate::optics::errors::{OpticsError, Result}; +use crate::optics::errors::OpticsError; use linfa::{param_guard::TransformGuard, Float, ParamGuard}; #[cfg(feature = "serde")] use serde_crate::{Deserialize, Serialize}; @@ -91,7 +91,7 @@ impl ParamGuard for OpticsParams { type Checked = OpticsValidParams; type Error = OpticsError; - fn check_ref(&self) -> Result<&Self::Checked> { + fn check_ref(&self) -> Result<&Self::Checked, OpticsError> { if self.0.tolerance <= F::zero() { Err(OpticsError::InvalidValue( "`tolerance` must be greater than 0!".to_string(), @@ -106,7 +106,7 @@ impl ParamGuard for OpticsParams { } } - fn check(self) -> Result { + fn check(self) -> Result { self.check_ref()?; Ok(self.0) } diff --git a/algorithms/linfa-ftrl/examples/winequality.rs b/algorithms/linfa-ftrl/examples/winequality_ftrl.rs similarity index 100% rename from algorithms/linfa-ftrl/examples/winequality.rs rename to algorithms/linfa-ftrl/examples/winequality_ftrl.rs diff --git a/algorithms/linfa-logistic/examples/winequality.rs b/algorithms/linfa-logistic/examples/winequality_logistic.rs similarity index 100% rename from algorithms/linfa-logistic/examples/winequality.rs rename to algorithms/linfa-logistic/examples/winequality_logistic.rs diff --git a/algorithms/linfa-logistic/examples/winequality_multi.rs b/algorithms/linfa-logistic/examples/winequality_multi_logistic.rs similarity index 100% rename from algorithms/linfa-logistic/examples/winequality_multi.rs rename to algorithms/linfa-logistic/examples/winequality_multi_logistic.rs diff --git a/algorithms/linfa-svm/examples/winequality_multi.rs b/algorithms/linfa-svm/examples/winequality_multi_svm.rs similarity index 100% rename from algorithms/linfa-svm/examples/winequality_multi.rs rename to algorithms/linfa-svm/examples/winequality_multi_svm.rs diff --git a/algorithms/linfa-svm/examples/winequality.rs b/algorithms/linfa-svm/examples/winequality_svm.rs similarity index 100% rename from algorithms/linfa-svm/examples/winequality.rs rename to algorithms/linfa-svm/examples/winequality_svm.rs diff --git a/src/benchmarks/mod.rs b/src/benchmarks/mod.rs index 94b6443b5..901cc7c77 100644 --- a/src/benchmarks/mod.rs +++ b/src/benchmarks/mod.rs @@ -1,6 +1,8 @@ #[cfg(feature = "benchmarks")] pub mod config { - use criterion::{measurement::WallTime, BenchmarkGroup, Criterion}; + #[cfg(not(target_os = "windows"))] + use criterion::Criterion; + use criterion::{measurement::WallTime, BenchmarkGroup}; #[cfg(not(target_os = "windows"))] use pprof::criterion::{Output, PProfProfiler}; use std::time::Duration;