Skip to content

Commit e0d46f4

Browse files
committed
feat: Make SerDe optional
1 parent eb76949 commit e0d46f4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+206
-126
lines changed

Cargo.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@ num-traits = "0.2.12"
2525
num = "0.3.0"
2626
rand = "0.7.3"
2727
rand_distr = "0.3.0"
28-
serde = { version = "1.0.115", features = ["derive"] }
29-
serde_derive = "1.0.115"
28+
serde = { version = "1.0.115", features = ["derive"], optional = true }
3029

3130
[dev-dependencies]
3231
criterion = "0.3"

src/algorithm/neighbour/cover_tree.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,16 @@
2424
//! ```
2525
use std::fmt::Debug;
2626

27-
use serde::{Deserialize, Serialize};
27+
#[cfg(feature = "serde")] use serde::{Deserialize, Serialize};
2828

2929
use crate::algorithm::sort::heap_select::HeapSelection;
3030
use crate::error::{Failed, FailedError};
3131
use crate::math::distance::Distance;
3232
use crate::math::num::RealNumber;
3333

3434
/// Implements Cover Tree algorithm
35-
#[derive(Serialize, Deserialize, Debug)]
35+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
36+
#[derive(Debug)]
3637
pub struct CoverTree<T, F: RealNumber, D: Distance<T, F>> {
3738
base: F,
3839
inv_log_base: F,
@@ -56,7 +57,8 @@ impl<T, F: RealNumber, D: Distance<T, F>> PartialEq for CoverTree<T, F, D> {
5657
}
5758
}
5859

59-
#[derive(Debug, Serialize, Deserialize)]
60+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
61+
#[derive(Debug)]
6062
struct Node<F: RealNumber> {
6163
idx: usize,
6264
max_dist: F,
@@ -65,7 +67,7 @@ struct Node<F: RealNumber> {
6567
scale: i64,
6668
}
6769

68-
#[derive(Debug, Serialize, Deserialize)]
70+
#[derive(Debug)]
6971
struct DistanceSet<F: RealNumber> {
7072
idx: usize,
7173
dist: Vec<F>,

src/algorithm/neighbour/linear_search.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
//!
2323
//! ```
2424
25-
use serde::{Deserialize, Serialize};
25+
#[cfg(feature = "serde")] use serde::{Deserialize, Serialize};
2626
use std::cmp::{Ordering, PartialOrd};
2727
use std::marker::PhantomData;
2828

@@ -32,7 +32,8 @@ use crate::math::distance::Distance;
3232
use crate::math::num::RealNumber;
3333

3434
/// Implements Linear Search algorithm, see [KNN algorithms](../index.html)
35-
#[derive(Serialize, Deserialize, Debug)]
35+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
36+
#[derive(Debug)]
3637
pub struct LinearKNNSearch<T, F: RealNumber, D: Distance<T, F>> {
3738
distance: D,
3839
data: Vec<T>,

src/algorithm/neighbour/mod.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ use crate::algorithm::neighbour::linear_search::LinearKNNSearch;
3535
use crate::error::Failed;
3636
use crate::math::distance::Distance;
3737
use crate::math::num::RealNumber;
38-
use serde::{Deserialize, Serialize};
38+
#[cfg(feature = "serde")] use serde::{Deserialize, Serialize};
3939

4040
pub(crate) mod bbd_tree;
4141
/// tree data structure for fast nearest neighbor search
@@ -45,15 +45,17 @@ pub mod linear_search;
4545

4646
/// Both, KNN classifier and regressor benefits from underlying search algorithms that helps to speed up queries.
4747
/// `KNNAlgorithmName` maintains a list of supported search algorithms, see [KNN algorithms](../algorithm/neighbour/index.html)
48-
#[derive(Serialize, Deserialize, Debug, Clone)]
48+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
49+
#[derive(Debug, Clone)]
4950
pub enum KNNAlgorithmName {
5051
/// Heap Search algorithm, see [`LinearSearch`](../algorithm/neighbour/linear_search/index.html)
5152
LinearSearch,
5253
/// Cover Tree Search algorithm, see [`CoverTree`](../algorithm/neighbour/cover_tree/index.html)
5354
CoverTree,
5455
}
5556

56-
#[derive(Serialize, Deserialize, Debug)]
57+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
58+
#[derive(Debug)]
5759
pub(crate) enum KNNAlgorithm<T: RealNumber, D: Distance<Vec<T>, T>> {
5860
LinearSearch(LinearKNNSearch<Vec<T>, T, D>),
5961
CoverTree(CoverTree<Vec<T>, T, D>),

src/cluster/dbscan.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
use std::fmt::Debug;
4444
use std::iter::Sum;
4545

46-
use serde::{Deserialize, Serialize};
46+
#[cfg(feature = "serde")] use serde::{Deserialize, Serialize};
4747

4848
use crate::algorithm::neighbour::{KNNAlgorithm, KNNAlgorithmName};
4949
use crate::api::{Predictor, UnsupervisedEstimator};
@@ -55,7 +55,8 @@ use crate::math::num::RealNumber;
5555
use crate::tree::decision_tree_classifier::which_max;
5656

5757
/// DBSCAN clustering algorithm
58-
#[derive(Serialize, Deserialize, Debug)]
58+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
59+
#[derive(Debug)]
5960
pub struct DBSCAN<T: RealNumber, D: Distance<Vec<T>, T>> {
6061
cluster_labels: Vec<i16>,
6162
num_classes: usize,

src/cluster/kmeans.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ use rand::Rng;
5656
use std::fmt::Debug;
5757
use std::iter::Sum;
5858

59-
use serde::{Deserialize, Serialize};
59+
#[cfg(feature = "serde")] use serde::{Deserialize, Serialize};
6060

6161
use crate::algorithm::neighbour::bbd_tree::BBDTree;
6262
use crate::api::{Predictor, UnsupervisedEstimator};
@@ -66,7 +66,8 @@ use crate::math::distance::euclidian::*;
6666
use crate::math::num::RealNumber;
6767

6868
/// K-Means clustering algorithm
69-
#[derive(Serialize, Deserialize, Debug)]
69+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
70+
#[derive(Debug)]
7071
pub struct KMeans<T: RealNumber> {
7172
k: usize,
7273
y: Vec<usize>,

src/decomposition/pca.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,16 @@
4747
//! <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
4848
use std::fmt::Debug;
4949

50-
use serde::{Deserialize, Serialize};
50+
#[cfg(feature = "serde")] use serde::{Deserialize, Serialize};
5151

5252
use crate::api::{Transformer, UnsupervisedEstimator};
5353
use crate::error::Failed;
5454
use crate::linalg::Matrix;
5555
use crate::math::num::RealNumber;
5656

5757
/// Principal components analysis algorithm
58-
#[derive(Serialize, Deserialize, Debug)]
58+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
59+
#[derive(Debug)]
5960
pub struct PCA<T: RealNumber, M: Matrix<T>> {
6061
eigenvectors: M,
6162
eigenvalues: Vec<T>,

src/decomposition/svd.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,16 @@
4646
use std::fmt::Debug;
4747
use std::marker::PhantomData;
4848

49-
use serde::{Deserialize, Serialize};
49+
#[cfg(feature = "serde")] use serde::{Deserialize, Serialize};
5050

5151
use crate::api::{Transformer, UnsupervisedEstimator};
5252
use crate::error::Failed;
5353
use crate::linalg::Matrix;
5454
use crate::math::num::RealNumber;
5555

5656
/// SVD
57-
#[derive(Serialize, Deserialize, Debug)]
57+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
58+
#[derive(Debug)]
5859
pub struct SVD<T: RealNumber, M: Matrix<T>> {
5960
components: M,
6061
phantom: PhantomData<T>,

src/ensemble/random_forest_classifier.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ use std::default::Default;
4949
use std::fmt::Debug;
5050

5151
use rand::Rng;
52-
use serde::{Deserialize, Serialize};
52+
#[cfg(feature = "serde")] use serde::{Deserialize, Serialize};
5353

5454
use crate::api::{Predictor, SupervisedEstimator};
5555
use crate::error::Failed;
@@ -61,7 +61,8 @@ use crate::tree::decision_tree_classifier::{
6161

6262
/// Parameters of the Random Forest algorithm.
6363
/// Some parameters here are passed directly into base estimator.
64-
#[derive(Serialize, Deserialize, Debug, Clone)]
64+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
65+
#[derive(Debug, Clone)]
6566
pub struct RandomForestClassifierParameters {
6667
/// Split criteria to use when building a tree. See [Decision Tree Classifier](../../tree/decision_tree_classifier/index.html)
6768
pub criterion: SplitCriterion,
@@ -78,7 +79,8 @@ pub struct RandomForestClassifierParameters {
7879
}
7980

8081
/// Random Forest Classifier
81-
#[derive(Serialize, Deserialize, Debug)]
82+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
83+
#[derive(Debug)]
8284
pub struct RandomForestClassifier<T: RealNumber> {
8385
parameters: RandomForestClassifierParameters,
8486
trees: Vec<DecisionTreeClassifier<T>>,

src/ensemble/random_forest_regressor.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ use std::default::Default;
4747
use std::fmt::Debug;
4848

4949
use rand::Rng;
50-
use serde::{Deserialize, Serialize};
50+
#[cfg(feature = "serde")] use serde::{Deserialize, Serialize};
5151

5252
use crate::api::{Predictor, SupervisedEstimator};
5353
use crate::error::Failed;
@@ -57,7 +57,8 @@ use crate::tree::decision_tree_regressor::{
5757
DecisionTreeRegressor, DecisionTreeRegressorParameters,
5858
};
5959

60-
#[derive(Serialize, Deserialize, Debug, Clone)]
60+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
61+
#[derive(Debug, Clone)]
6162
/// Parameters of the Random Forest Regressor
6263
/// Some parameters here are passed directly into base estimator.
6364
pub struct RandomForestRegressorParameters {
@@ -74,7 +75,8 @@ pub struct RandomForestRegressorParameters {
7475
}
7576

7677
/// Random Forest Regressor
77-
#[derive(Serialize, Deserialize, Debug)]
78+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
79+
#[derive(Debug)]
7880
pub struct RandomForestRegressor<T: RealNumber> {
7981
parameters: RandomForestRegressorParameters,
8082
trees: Vec<DecisionTreeRegressor<T>>,

0 commit comments

Comments
 (0)