ngt 0.4.1 → 0.4.2

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: 94ae9612ba58d3e5aa3fecdea4ccb93e6ecaa8086c7b5e5e64a626962a3c7dbf
4
- data.tar.gz: 6bf8e3fc92f83994e47caf230027199a2da2c0464b5cce0cdaf0f861ce2b05e2
3
+ metadata.gz: a8a99eccfae3fd0f09f5566ec99d240049e34a4a5ddff73ef26333bad6070932
4
+ data.tar.gz: ea4dae9eee921e69078ca04eb76c67ceb8c3f00ba368b6c76809a8f98b39478e
5
5
  SHA512:
6
- metadata.gz: 8580f88ad7c6fa1527445aeeba274e67bcf76612cf3aa2c100afe53ca62628df59237119d1878b3244517bd8c01a75cfc5015176c2baf9e2d6eb9617876d4fd1
7
- data.tar.gz: 92e66568528c8cc76fe38efdb2795106bea0e50ca1263bf659ef52e26b4f4c36e192e5180a304acd186c746f3b02a3cf2488c2e95c786d024174b8411e5f8fba
6
+ metadata.gz: 67f096ab1115949bba0606db499790ee6168fada1f06f7b9b46a1631c3f7f2311f9babbdd374afc0dea5dbba5d9a44721f7d8d8a61882c73bc44c043c3f5c258
7
+ data.tar.gz: 4b44ba3724255e3deb15a52be30a7856ef76f2c47ad5be75a2f9535561058f3dc3dc12a682063054d812f581a266ae423f819ded4fd7c6d1e827c27ca4006595
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.4.2 (2023-07-24)
2
+
3
+ - Fixed error with `dup` and `clone`
4
+
1
5
  ## 0.4.1 (2022-12-08)
2
6
 
3
7
  - Added support for `:float16` object type
data/lib/ngt/ffi.rb CHANGED
@@ -76,5 +76,14 @@ module Ngt
76
76
  attach_function :ngt_optimizer_execute, %i[pointer string string pointer], :bool
77
77
  attach_function :ngt_optimizer_set, %i[pointer int int int float float float float double double pointer], :bool
78
78
  attach_function :ngt_destroy_optimizer, %i[pointer], :void
79
+
80
+ def self.add_finalizer(pointer, method)
81
+ ObjectSpace.define_finalizer(pointer, finalize(pointer.to_i, method))
82
+ end
83
+
84
+ def self.finalize(addr, method)
85
+ # must use proc instead of stabby lambda
86
+ proc { FFI.send(method, ::FFI::Pointer.new(:pointer, addr)) }
87
+ end
79
88
  end
80
89
  end
data/lib/ngt/index.rb CHANGED
@@ -9,10 +9,11 @@ module Ngt
9
9
  @path = path
10
10
 
11
11
  @error = FFI.ngt_create_error_object
12
+ FFI.add_finalizer(@error, :ngt_destroy_error_object)
13
+
12
14
  @property = ffi(:ngt_create_property)
15
+ FFI.add_finalizer(@property, :ngt_destroy_property)
13
16
  ffi(:ngt_get_property, @index, @property)
14
-
15
- ObjectSpace.define_finalizer(self, self.class.finalize(@error, @index, @property))
16
17
  end
17
18
 
18
19
  def dimensions
@@ -177,6 +178,8 @@ module Ngt
177
178
  end
178
179
  end
179
180
 
181
+ FFI.add_finalizer(index, :ngt_close_index)
182
+
180
183
  super(index, path)
181
184
  ensure
182
185
  FFI.ngt_destroy_error_object(error) if error
@@ -197,15 +200,6 @@ module Ngt
197
200
  Utils.ffi(*args)
198
201
  end
199
202
 
200
- def self.finalize(error, index, property)
201
- # must use proc instead of stabby lambda
202
- proc do
203
- FFI.ngt_destroy_error_object(error)
204
- FFI.ngt_close_index(index)
205
- FFI.ngt_destroy_property(property)
206
- end
207
- end
208
-
209
203
  private
210
204
 
211
205
  def narray?(data)
data/lib/ngt/optimizer.rb CHANGED
@@ -4,12 +4,13 @@ module Ngt
4
4
 
5
5
  def initialize(outgoing: 10, incoming: 120, queries: 100, low_accuracy_from: 0.3, low_accuracy_to: 0.5, high_accuracy_from: 0.8, high_accuracy_to: 0.9, gt_epsilon: 0.1, merge: 0.2)
6
6
  @error = FFI.ngt_create_error_object
7
+ FFI.add_finalizer(@error, :ngt_destroy_error_object)
8
+
7
9
  @optimizer = ffi(:ngt_create_optimizer, true)
10
+ FFI.add_finalizer(@optimizer, :ngt_destroy_optimizer)
8
11
 
9
12
  ffi(:ngt_optimizer_set, @optimizer, outgoing, incoming, queries, low_accuracy_from,
10
13
  low_accuracy_to, high_accuracy_from, high_accuracy_to, gt_epsilon, merge)
11
-
12
- ObjectSpace.define_finalizer(self, self.class.finalize(@optimizer, @error))
13
14
  end
14
15
 
15
16
  def execute(in_index_path, out_index_path)
@@ -20,14 +21,6 @@ module Ngt
20
21
  ffi(:ngt_optimizer_adjust_search_coefficients, @optimizer, path(index_path))
21
22
  end
22
23
 
23
- def self.finalize(optimizer, error)
24
- # must use proc instead of stabby lambda
25
- proc do
26
- FFI.ngt_destroy_optimizer(optimizer)
27
- FFI.ngt_destroy_error_object(error)
28
- end
29
- end
30
-
31
24
  private
32
25
 
33
26
  def path(obj)
data/lib/ngt/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ngt
2
- VERSION = "0.4.1"
2
+ VERSION = "0.4.2"
3
3
  end
data/lib/ngt.rb CHANGED
@@ -5,10 +5,10 @@ require "ffi"
5
5
  require "tmpdir"
6
6
 
7
7
  # modules
8
- require "ngt/utils"
9
- require "ngt/index"
10
- require "ngt/optimizer"
11
- require "ngt/version"
8
+ require_relative "ngt/utils"
9
+ require_relative "ngt/index"
10
+ require_relative "ngt/optimizer"
11
+ require_relative "ngt/version"
12
12
 
13
13
  module Ngt
14
14
  class Error < StandardError; end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ngt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-09 00:00:00.000000000 Z
11
+ date: 2023-07-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -71,7 +71,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
71
71
  - !ruby/object:Gem::Version
72
72
  version: '0'
73
73
  requirements: []
74
- rubygems_version: 3.3.7
74
+ rubygems_version: 3.4.10
75
75
  signing_key:
76
76
  specification_version: 4
77
77
  summary: High-speed approximate nearest neighbors for Ruby