outliertree 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9a3e3de44aa1af8f0db3ca34f8ef4fc91cda84ee0ee2d75e142fe975e7821d6b
4
- data.tar.gz: 1d0e8532fc9f319c0879948dc3c117f1a9b1c1cd64cb740d19bdbe657f015a51
3
+ metadata.gz: 57de739284b2cb4fd83c9f5edc81bf15e95f659b2bd85459fd2e55a0b3964dd0
4
+ data.tar.gz: 4f2799ead4bbe1e6db6a5676c8709c6b518afb7321e5917f3858add97aed543b
5
5
  SHA512:
6
- metadata.gz: 4df1d581ebb43267c0608c90011298bb452929f2fefe579b1786d99b390c0df8e7f56129ec18d6d043427482a17e719e7de0515791272a15a70a7b820db9b1ea
7
- data.tar.gz: 4ae398b9da0d6bff07e2d22dd561ef900a4c9a3a84d4581c18d783bbbd47fe3b2d01d91d7e1ad91b8641c2c533ee0fa67a3e0165168433a814c43e93d6a9c080
6
+ metadata.gz: 8bc84c17be1778abb020066848325beeff068dd55c95701928cbcec1869a4c4123fc76c33871782734e0fceef37ddc6af9a4ef44da45d70310cce70610ac2d13
7
+ data.tar.gz: 6611cc3958469710b626429d1c6cc7703f0ef3d4e0e1feb52120134f9954819e3e87fc52ed3449e9be4c89a4974f8b3f6825aead9ec9739f92d538097e078117
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 0.2.0 (2021-05-17)
2
+
3
+ - Updated to Rice 4
4
+ - Dropped support for Ruby < 2.6
5
+
1
6
  ## 0.1.2 (2021-02-08)
2
7
 
3
8
  - Fixed error with missing numeric values
@@ -2,12 +2,8 @@
2
2
  #include <outlier_tree.hpp>
3
3
 
4
4
  // rice
5
- #include <rice/Array.hpp>
6
- #include <rice/Hash.hpp>
7
- #include <rice/Module.hpp>
8
- #include <rice/Object.hpp>
9
- #include <rice/String.hpp>
10
- #include <rice/Symbol.hpp>
5
+ #include <rice/rice.hpp>
6
+ #include <rice/stl.hpp>
11
7
 
12
8
  using Rice::Array;
13
9
  using Rice::Hash;
@@ -18,74 +14,77 @@ using Rice::Symbol;
18
14
  using Rice::define_class_under;
19
15
  using Rice::define_module;
20
16
 
21
- template<>
22
- Object to_ruby<std::vector<char>>(std::vector<char> const & x)
17
+ namespace Rice::detail
23
18
  {
24
- Array a;
25
- for (size_t i = 0; i < x.size(); i++) {
26
- a.push(x[i]);
27
- }
28
- return a;
29
- }
19
+ template<typename T>
20
+ class To_Ruby<std::vector<T>>
21
+ {
22
+ public:
23
+ VALUE convert(std::vector<T> const & x)
24
+ {
25
+ auto a = rb_ary_new2(x.size());
26
+ for (const auto& v : x) {
27
+ rb_ary_push(a, To_Ruby<T>().convert(v));
28
+ }
29
+ return a;
30
+ }
31
+ };
30
32
 
31
- template<>
32
- Object to_ruby<std::vector<int>>(std::vector<int> const & x)
33
- {
34
- Array a;
35
- for (size_t i = 0; i < x.size(); i++) {
36
- a.push(x[i]);
37
- }
38
- return a;
39
- }
33
+ template<>
34
+ struct Type<ColType>
35
+ {
36
+ static bool verify()
37
+ {
38
+ return true;
39
+ }
40
+ };
40
41
 
41
- template<>
42
- Object to_ruby<std::vector<unsigned long>>(std::vector<unsigned long> const & x)
43
- {
44
- Array a;
45
- for (size_t i = 0; i < x.size(); i++) {
46
- a.push(x[i]);
47
- }
48
- return a;
49
- }
42
+ template<>
43
+ class To_Ruby<ColType>
44
+ {
45
+ public:
46
+ VALUE convert(ColType const & x)
47
+ {
48
+ switch (x) {
49
+ case Numeric: return Symbol("numeric");
50
+ case Categorical: return Symbol("categorical");
51
+ case Ordinal: return Symbol("ordinal");
52
+ case NoType: return Symbol("no_type");
53
+ }
54
+ throw std::runtime_error("Unknown column type");
55
+ }
56
+ };
50
57
 
51
- template<>
52
- Object to_ruby<std::vector<double>>(std::vector<double> const & x)
53
- {
54
- Array a;
55
- for (size_t i = 0; i < x.size(); i++) {
56
- a.push(x[i]);
57
- }
58
- return a;
59
- }
58
+ template<>
59
+ struct Type<SplitType>
60
+ {
61
+ static bool verify()
62
+ {
63
+ return true;
64
+ }
65
+ };
60
66
 
61
- template<>
62
- Object to_ruby<ColType>(ColType const & x)
63
- {
64
- switch (x) {
65
- case Numeric: return Symbol("numeric");
66
- case Categorical: return Symbol("categorical");
67
- case Ordinal: return Symbol("ordinal");
68
- case NoType: return Symbol("no_type");
69
- }
70
- throw std::runtime_error("Unknown column type");
71
- }
72
-
73
- template<>
74
- Object to_ruby<SplitType>(SplitType const & x)
75
- {
76
- switch (x) {
77
- case LessOrEqual: return Symbol("less_or_equal");
78
- case Greater: return Symbol("greater");
79
- case Equal: return Symbol("equal");
80
- case NotEqual: return Symbol("not_equal");
81
- case InSubset: return Symbol("in_subset");
82
- case NotInSubset: return Symbol("not_in_subset");
83
- case SingleCateg: return Symbol("single_categ");
84
- case SubTrees: return Symbol("sub_trees");
85
- case IsNa: return Symbol("is_na");
86
- case Root: return Symbol("root");
87
- }
88
- throw std::runtime_error("Unknown split type");
67
+ template<>
68
+ class To_Ruby<SplitType>
69
+ {
70
+ public:
71
+ VALUE convert(SplitType const & x)
72
+ {
73
+ switch (x) {
74
+ case LessOrEqual: return Symbol("less_or_equal");
75
+ case Greater: return Symbol("greater");
76
+ case Equal: return Symbol("equal");
77
+ case NotEqual: return Symbol("not_equal");
78
+ case InSubset: return Symbol("in_subset");
79
+ case NotInSubset: return Symbol("not_in_subset");
80
+ case SingleCateg: return Symbol("single_categ");
81
+ case SubTrees: return Symbol("sub_trees");
82
+ case IsNa: return Symbol("is_na");
83
+ case Root: return Symbol("root");
84
+ }
85
+ throw std::runtime_error("Unknown split type");
86
+ }
87
+ };
89
88
  }
90
89
 
91
90
  extern "C"
@@ -95,55 +94,55 @@ void Init_ext()
95
94
  Module rb_mExt = define_module_under(rb_mOutlierTree, "Ext");
96
95
 
97
96
  define_class_under<Cluster>(rb_mExt, "Cluster")
98
- .define_method("upper_lim", *[](Cluster& self) { return self.upper_lim; })
99
- .define_method("display_lim_high", *[](Cluster& self) { return self.display_lim_high; })
100
- .define_method("perc_below", *[](Cluster& self) { return self.perc_below; })
101
- .define_method("display_lim_low", *[](Cluster& self) { return self.display_lim_low; })
102
- .define_method("perc_above", *[](Cluster& self) { return self.perc_above; })
103
- .define_method("display_mean", *[](Cluster& self) { return self.display_mean; })
104
- .define_method("display_sd", *[](Cluster& self) { return self.display_sd; })
105
- .define_method("cluster_size", *[](Cluster& self) { return self.cluster_size; })
106
- .define_method("split_point", *[](Cluster& self) { return self.split_point; })
107
- .define_method("split_subset", *[](Cluster& self) { return self.split_subset; })
108
- .define_method("split_lev", *[](Cluster& self) { return self.split_lev; })
109
- .define_method("split_type", *[](Cluster& self) { return self.split_type; })
110
- .define_method("column_type", *[](Cluster& self) { return self.column_type; })
111
- .define_method("has_na_branch", *[](Cluster& self) { return self.has_NA_branch; })
112
- .define_method("col_num", *[](Cluster& self) { return self.col_num; });
97
+ .define_method("upper_lim", [](Cluster& self) { return self.upper_lim; })
98
+ .define_method("display_lim_high", [](Cluster& self) { return self.display_lim_high; })
99
+ .define_method("perc_below", [](Cluster& self) { return self.perc_below; })
100
+ .define_method("display_lim_low", [](Cluster& self) { return self.display_lim_low; })
101
+ .define_method("perc_above", [](Cluster& self) { return self.perc_above; })
102
+ .define_method("display_mean", [](Cluster& self) { return self.display_mean; })
103
+ .define_method("display_sd", [](Cluster& self) { return self.display_sd; })
104
+ .define_method("cluster_size", [](Cluster& self) { return self.cluster_size; })
105
+ .define_method("split_point", [](Cluster& self) { return self.split_point; })
106
+ .define_method("split_subset", [](Cluster& self) { return self.split_subset; })
107
+ .define_method("split_lev", [](Cluster& self) { return self.split_lev; })
108
+ .define_method("split_type", [](Cluster& self) { return self.split_type; })
109
+ .define_method("column_type", [](Cluster& self) { return self.column_type; })
110
+ .define_method("has_na_branch", [](Cluster& self) { return self.has_NA_branch; })
111
+ .define_method("col_num", [](Cluster& self) { return self.col_num; });
113
112
 
114
113
  define_class_under<ClusterTree>(rb_mExt, "ClusterTree")
115
- .define_method("parent_branch", *[](ClusterTree& self) { return self.parent_branch; })
116
- .define_method("parent", *[](ClusterTree& self) { return self.parent; })
117
- .define_method("all_branches", *[](ClusterTree& self) { return self.all_branches; })
118
- .define_method("column_type", *[](ClusterTree& self) { return self.column_type; })
119
- .define_method("col_num", *[](ClusterTree& self) { return self.col_num; })
120
- .define_method("split_point", *[](ClusterTree& self) { return self.split_point; })
121
- .define_method("split_subset", *[](ClusterTree& self) { return self.split_subset; })
122
- .define_method("split_lev", *[](ClusterTree& self) { return self.split_lev; });
114
+ .define_method("parent_branch", [](ClusterTree& self) { return self.parent_branch; })
115
+ .define_method("parent", [](ClusterTree& self) { return self.parent; })
116
+ .define_method("all_branches", [](ClusterTree& self) { return self.all_branches; })
117
+ .define_method("column_type", [](ClusterTree& self) { return self.column_type; })
118
+ .define_method("col_num", [](ClusterTree& self) { return self.col_num; })
119
+ .define_method("split_point", [](ClusterTree& self) { return self.split_point; })
120
+ .define_method("split_subset", [](ClusterTree& self) { return self.split_subset; })
121
+ .define_method("split_lev", [](ClusterTree& self) { return self.split_lev; });
123
122
 
124
123
  define_class_under<ModelOutputs>(rb_mExt, "ModelOutputs")
125
- .define_method("outlier_scores_final", *[](ModelOutputs& self) { return self.outlier_scores_final; })
126
- .define_method("outlier_columns_final", *[](ModelOutputs& self) { return self.outlier_columns_final; })
127
- .define_method("outlier_clusters_final", *[](ModelOutputs& self) { return self.outlier_clusters_final; })
128
- .define_method("outlier_trees_final", *[](ModelOutputs& self) { return self.outlier_trees_final; })
129
- .define_method("outlier_depth_final", *[](ModelOutputs& self) { return self.outlier_depth_final; })
130
- .define_method("outlier_decimals_distr", *[](ModelOutputs& self) { return self.outlier_decimals_distr; })
131
- .define_method("min_decimals_col", *[](ModelOutputs& self) { return self.min_decimals_col; })
124
+ .define_method("outlier_scores_final", [](ModelOutputs& self) { return self.outlier_scores_final; })
125
+ .define_method("outlier_columns_final", [](ModelOutputs& self) { return self.outlier_columns_final; })
126
+ .define_method("outlier_clusters_final", [](ModelOutputs& self) { return self.outlier_clusters_final; })
127
+ .define_method("outlier_trees_final", [](ModelOutputs& self) { return self.outlier_trees_final; })
128
+ .define_method("outlier_depth_final", [](ModelOutputs& self) { return self.outlier_depth_final; })
129
+ .define_method("outlier_decimals_distr", [](ModelOutputs& self) { return self.outlier_decimals_distr; })
130
+ .define_method("min_decimals_col", [](ModelOutputs& self) { return self.min_decimals_col; })
132
131
  .define_method(
133
132
  "all_clusters",
134
- *[](ModelOutputs& self, size_t i, size_t j) {
133
+ [](ModelOutputs& self, size_t i, size_t j) {
135
134
  return self.all_clusters[i][j];
136
135
  })
137
136
  .define_method(
138
137
  "all_trees",
139
- *[](ModelOutputs& self, size_t i, size_t j) {
138
+ [](ModelOutputs& self, size_t i, size_t j) {
140
139
  return self.all_trees[i][j];
141
140
  });
142
141
 
143
142
  rb_mExt
144
- .define_singleton_method(
143
+ .define_singleton_function(
145
144
  "fit_outliers_models",
146
- *[](Hash options) {
145
+ [](Hash options) {
147
146
  ModelOutputs model_outputs;
148
147
 
149
148
  // data
@@ -219,9 +218,9 @@ void Init_ext()
219
218
  );
220
219
  return model_outputs;
221
220
  })
222
- .define_singleton_method(
221
+ .define_singleton_function(
223
222
  "find_new_outliers",
224
- *[](ModelOutputs& model_outputs, Hash options) {
223
+ [](ModelOutputs& model_outputs, Hash options) {
225
224
  // data
226
225
  size_t nrows = options.get<size_t, Symbol>("nrows");
227
226
  size_t ncols_numeric = options.get<size_t, Symbol>("ncols_numeric");
@@ -1,6 +1,6 @@
1
1
  require "mkmf-rice"
2
2
 
3
- $CXXFLAGS += " -std=c++11"
3
+ $CXXFLAGS += " -std=c++17"
4
4
 
5
5
  apple_clang = RbConfig::CONFIG["CC_VERSION_MESSAGE"] =~ /apple clang/i
6
6
 
@@ -1,3 +1,3 @@
1
1
  module OutlierTree
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: outliertree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-09 00:00:00.000000000 Z
11
+ date: 2021-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rice
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '2.2'
19
+ version: 4.0.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '2.2'
26
+ version: 4.0.2
27
27
  description:
28
28
  email: andrew@ankane.org
29
29
  executables: []
@@ -66,7 +66,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: '2.5'
69
+ version: '2.6'
70
70
  required_rubygems_version: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - ">="