umappp 0.1.4 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fde6f3e2f4fc7014e87ddd4cdcb5fefe60d14e34364682a667436373293ec86e
4
- data.tar.gz: aecbfebfbaa5181eeb6572cb27e8cd5621d52bb2b7912ffbdc786eada4e8d8c0
3
+ metadata.gz: 4268767d4aa68fb7795e72e48a9822b629390091cd5214d460e1d99a3127a3c3
4
+ data.tar.gz: 684fdcf60aa7dc40a061927103692dda85fc2e40bb1680b0c61f014980197292
5
5
  SHA512:
6
- metadata.gz: 21a24bf715c70961237d428679e7e2bd2b090843275ec989251645ef7b2cb579f6a130ae5a46cfedbcf34d25b72f6db9a41032dc0d7df39c62e93d39c5e36e2a
7
- data.tar.gz: 5006adc1daa306597e2bfe961a6cbdc9bcf6a291d24bad200766551c8cf2f15b4096e544758da1040c0d0e46c7b6840cca58c1df3facc372000588e3c9a6da4c
6
+ metadata.gz: 7a9d5181ec290f40b5b22079c36d90a2fe07e1072b35b933ee30da253fc0f734431081334b6fc7510317df330e7c321386bc46da742d4515a646437e70602835
7
+ data.tar.gz: 05d42582e0d559591bd22b767a6d7df7b821288fa8b44da86d8255822b49e629c15dd33e719d383a08d933ff1dfdd3fdf839e3eed7f2131dc0bf868c3ad467b4
data/README.md CHANGED
@@ -16,7 +16,6 @@
16
16
 
17
17
  ## Installation
18
18
 
19
-
20
19
  ```
21
20
  gem install umappp
22
21
  ```
@@ -28,10 +27,12 @@ gem install umappp
28
27
  This Gem provides the module `Umappp` and its singular method `Umappp.run()`. The first argument of `Umappp.run()` is a two-dimensional Ruby array or a two-dimensional Numo array. [Numo](https://github.com/ruby-numo/numo-narray) is a library for performing N-dimensional array computing like NumPy. The argument is converted to `Numo::SFloat`. SFloat is a single precision floating point number type of Numo::NArray.
29
28
 
30
29
  ```ruby
31
- Umappp.run(embedding) # embedding is two-dimensional Ruby array or Numo array
30
+ # The embedding is two-dimensional Ruby array or Numo array
31
+ # Returns Numo::SFloat
32
+ r = Umappp.run(embedding)
32
33
 
33
- # with parameters
34
- Umappp.run(pixels, num_threads: 8, a: 1.8956, b: 0.8006)
34
+ # Run with parameters
35
+ r = Umappp.run(pixels, num_threads: 8, a: 1.8956, b: 0.8006)
35
36
  ```
36
37
 
37
38
  Available parameters and their default values
@@ -1,7 +1,6 @@
1
1
  // Uniform Manifold Approximation and Projection for Ruby
2
2
  // https://github.com/kojix2/ruby-umappp
3
3
 
4
-
5
4
  #include <rice/rice.hpp>
6
5
  #include <rice/stl.hpp>
7
6
  #include "numo.hpp"
@@ -52,7 +51,7 @@ Object umappp_run(
52
51
  {
53
52
  // Parameters are taken from a Ruby Hash object.
54
53
  // If there is key, set the value.
55
-
54
+
56
55
  auto umap_ptr = new Umap;
57
56
 
58
57
  double local_connectivity = Umap::Defaults::local_connectivity;
@@ -159,7 +158,7 @@ Object umappp_run(
159
158
  num_threads = params.get<int>(Symbol("num_threads"));
160
159
  umap_ptr->set_num_threads(num_threads);
161
160
  }
162
-
161
+
163
162
  // initialize_from_matrix
164
163
 
165
164
  const float *y = data.read_ptr();
@@ -181,12 +180,16 @@ Object umappp_run(
181
180
  std::vector<Float> embedding(ndim * nobs);
182
181
 
183
182
  auto status = umap_ptr->initialize(knncolle_ptr.get(), ndim, embedding.data());
184
-
183
+ if (nobs < 0 || ndim < 0)
184
+ {
185
+ throw std::runtime_error("nobs or ndim is negative");
186
+ }
185
187
  if (tick == 0)
186
188
  {
187
189
  status.run(ndim, embedding.data(), 0);
188
190
 
189
- auto na = numo::SFloat({(uint)nobs, (uint)ndim});
191
+ // it is safe to cast to unsigned int
192
+ auto na = numo::SFloat({(unsigned int)nobs, (unsigned int)ndim});
190
193
  std::copy(embedding.begin(), embedding.end(), na.write_ptr());
191
194
 
192
195
  return na;
@@ -201,7 +204,8 @@ Object umappp_run(
201
204
 
202
205
  status.run(ndim, embedding.data(), epoch_limit);
203
206
 
204
- auto na = numo::SFloat({(uint)nobs, (uint)ndim});
207
+ //it is safe to cast to unsigned int
208
+ auto na = numo::SFloat({(unsigned int)nobs, (unsigned int)ndim});
205
209
  std::copy(embedding.begin(), embedding.end(), na.write_ptr());
206
210
 
207
211
  rb_ary_push(ret, na.value());
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Umappp
4
- VERSION = "0.1.4"
4
+ VERSION = "0.1.6"
5
5
  end
data/lib/umappp.rb CHANGED
@@ -37,6 +37,7 @@ module Umappp
37
37
  # @param seed [Integer]
38
38
  # @param batch [Boolean]
39
39
  # @param num_threads [Integer]
40
+ # @return [Numo::SFloat] the final embedding
40
41
 
41
42
  def self.run(embedding, method: :annoy, ndim: 2, tick: 0, **params)
42
43
  unless (u = (params.keys - default_parameters.keys)).empty?
@@ -1,6 +1,9 @@
1
1
  #ifndef UMAPPP_NEIGHBOR_LIST_HPP
2
2
  #define UMAPPP_NEIGHBOR_LIST_HPP
3
3
 
4
+ #include <utility>
5
+ #include <vector>
6
+
4
7
  /**
5
8
  * @file NeighborList.hpp
6
9
  *
@@ -38,7 +38,7 @@ enum InitMethod { SPECTRAL, SPECTRAL_ONLY, RANDOM, NONE };
38
38
  /**
39
39
  * @cond
40
40
  */
41
- int choose_num_epochs(int num_epochs, size_t size) {
41
+ inline int choose_num_epochs(int num_epochs, size_t size) {
42
42
  if (num_epochs < 0) {
43
43
  // Choosing the number of epochs. We use a simple formula to decrease
44
44
  // the number of epochs with increasing size, with the aim being that
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: umappp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - kojix2
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-12 00:00:00.000000000 Z
11
+ date: 2022-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: numo-narray