ndav-torch-tensor 0.0.1 → 0.0.3
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 +4 -4
- data/.gitignore +1 -0
- data/README.md +20 -1
- data/lib/ndav/torch/tensor.rb +41 -59
- data/ndav-torch-tensor.gemspec +2 -2
- data/test/test_torch_tensor.rb +9 -0
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 51c99b994468de49aacf7b24673dd7cd4e755b1bc1f5ea858d2aa85093aa299c
|
|
4
|
+
data.tar.gz: 9c0737070ab1b78c0f9ef3908b989060e6693d555380a6c793a3e4f26015dc57
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4d03dcd52b4cc3db70cd26222a6c2c0f2ae8ab6f361aa593227860fd93f4a1ff8c1423040e63e37bc929e7a517f7f2210874af71fe030e84b7bf3b74b212a747
|
|
7
|
+
data.tar.gz: b6cdbdfdac3d49920e23bdbad413d92d97e2343536b9f295d25a5319d1fdf139321e67995f20ac6dec61525e48888c129d351269a36b1d3cea6fcf7cdc6c9a5e
|
data/.gitignore
CHANGED
data/README.md
CHANGED
|
@@ -1,11 +1,30 @@
|
|
|
1
1
|
NDAV::Torch::Tensor
|
|
2
2
|
===================
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
[NDAV][] bridge for [Torch][]::Tensor.
|
|
5
|
+
|
|
6
|
+
SYNOPSIS
|
|
7
|
+
--------
|
|
8
|
+
|
|
9
|
+
```ruby
|
|
10
|
+
require "ndav/torch/tensor"
|
|
11
|
+
|
|
12
|
+
torch = Torch.rand(2, 3) # => Torch::Tensor
|
|
13
|
+
ndav = torch.to_ndav # => NDAV
|
|
14
|
+
torch = ndav.to_torch_tensor # => Torch::Tensor
|
|
15
|
+
|
|
16
|
+
ndav = NDAV.from_torch_tensor(torch) # => NDAV
|
|
17
|
+
torch = Torch::Tensor.from_ndav(ndav) # => Torch::Tensor
|
|
18
|
+
|
|
19
|
+
include NDAV::Converter
|
|
20
|
+
ndav = NDAV(torch) # => NDAV
|
|
21
|
+
torch = TorchTensor(ndav) # => Torch::NArray
|
|
22
|
+
```
|
|
5
23
|
|
|
6
24
|
LICENSE
|
|
7
25
|
-------
|
|
8
26
|
|
|
9
27
|
MIT license. See LICENSE.txt file.
|
|
10
28
|
|
|
29
|
+
[NDAV]: https://kitaitimakoto.gitlab.io/ndav/
|
|
11
30
|
[Torch]: https://github.com/ankane/torch.rb
|
data/lib/ndav/torch/tensor.rb
CHANGED
|
@@ -4,6 +4,19 @@ require "torch"
|
|
|
4
4
|
|
|
5
5
|
class NDAV
|
|
6
6
|
module Torch
|
|
7
|
+
module FromNDAV
|
|
8
|
+
def from_ndav(ndav)
|
|
9
|
+
dtype = Tensor::FORMAT_TO_TYPE[ndav.format]
|
|
10
|
+
raise ArgumentError, "unsupported format: #{input.format}, currently supported: #{Tensor::TYPE_TO_FORMAT.values}" unless dtype
|
|
11
|
+
|
|
12
|
+
opts = tensor_options(dtype:)
|
|
13
|
+
tensor = _from_blob_ref(ndav.to_s, [ndav.byte_size / ndav.item_size], opts)
|
|
14
|
+
.reshape(ndav.shape)
|
|
15
|
+
tensor.instance_variable_set(:@ndav, ndav) # keep reference to NDAV to prevent GC
|
|
16
|
+
tensor
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
7
20
|
module Tensor
|
|
8
21
|
TYPE_TO_FORMAT = {
|
|
9
22
|
int8: "c",
|
|
@@ -33,76 +46,45 @@ class NDAV
|
|
|
33
46
|
|
|
34
47
|
TYPE_SIZES = TYPE_TO_FORMAT.transform_values {|format| ITEM_SIZES[format]}
|
|
35
48
|
|
|
36
|
-
module
|
|
37
|
-
def
|
|
38
|
-
dtype = FORMAT_TO_TYPE[ndav.format]
|
|
39
|
-
raise ArgumentError, "unsupported format: #{input.format}, currently supported: #{TYPE_TO_FORMAT.values}" unless dtype
|
|
40
|
-
|
|
41
|
-
opts = tensor_options(dtype:)
|
|
42
|
-
tensor = _from_blob_ref(ndav.to_s, [ndav.byte_size / ndav.item_size], opts)
|
|
43
|
-
.reshape(ndav.shape)
|
|
44
|
-
tensor.instance_variable_set(:@ndav, ndav) # keep reference to NDAV to prevent GC
|
|
45
|
-
tensor
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
module ToNDAV
|
|
50
|
-
def to_ndav
|
|
49
|
+
module MemoryViewable
|
|
50
|
+
def ndav_descriptor(**)
|
|
51
51
|
format = TYPE_TO_FORMAT[dtype]
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
end
|
|
57
|
-
end
|
|
52
|
+
unless format
|
|
53
|
+
warn "unsupported dtype: #{dtype}, currently supported: #{TYPE_TO_FORMAT.keys}"
|
|
54
|
+
return false
|
|
55
|
+
end
|
|
58
56
|
|
|
59
|
-
|
|
60
|
-
def from_torch_tensor(tensor)
|
|
61
|
-
tensor.to_ndav
|
|
62
|
-
end
|
|
63
|
-
end
|
|
57
|
+
byte_size = numel * element_size
|
|
64
58
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
59
|
+
{
|
|
60
|
+
data: ::Fiddle::Pointer.new(_data_ptr, byte_size),
|
|
61
|
+
shape:,
|
|
62
|
+
strides: stride.collect {|s| s * element_size},
|
|
63
|
+
format:,
|
|
64
|
+
byte_size:,
|
|
65
|
+
readonly?: false,
|
|
66
|
+
sub_offsets: nil
|
|
67
|
+
}
|
|
68
68
|
end
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
module Converter
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
super
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
else
|
|
85
|
-
def TorchTensor(array, *, **)
|
|
86
|
-
if array.kind_of? ::NDAV
|
|
87
|
-
array.to_torch_tensor
|
|
88
|
-
elsif array.respond_to? :to_torch_tensor
|
|
89
|
-
array.to_torch_tensor
|
|
90
|
-
elsif array.respond_to? :to_ndav
|
|
91
|
-
array.to_ndav(*, **).to_torch_tensor
|
|
92
|
-
else
|
|
93
|
-
::NDAV.new(array, *, **).to_torch_tensor
|
|
94
|
-
end
|
|
72
|
+
def TorchTensor(array, *, **)
|
|
73
|
+
if array.kind_of? ::NDAV
|
|
74
|
+
array.to_torch_tensor
|
|
75
|
+
elsif array.respond_to? :to_torch_tensor
|
|
76
|
+
array.to_torch_tensor
|
|
77
|
+
elsif array.respond_to? :to_ndav
|
|
78
|
+
array.to_ndav(*, **).to_torch_tensor
|
|
79
|
+
else
|
|
80
|
+
::NDAV.new(array, *, **).to_torch_tensor
|
|
95
81
|
end
|
|
96
82
|
end
|
|
97
83
|
end
|
|
98
|
-
|
|
99
|
-
::Torch.extend FromNDAV
|
|
100
|
-
::Torch::Tensor.include ToNDAV
|
|
101
|
-
::NDAV.extend FromTorchTensor
|
|
102
|
-
::NDAV.include ToTorchTensor
|
|
103
|
-
::NDAV::Converter.singleton_class.prepend Converter
|
|
104
|
-
::NDAV::Converter.prepend Converter
|
|
105
84
|
end
|
|
106
85
|
end
|
|
86
|
+
|
|
87
|
+
register ::Torch, Torch, name: :torch_tensor
|
|
88
|
+
register ::Torch::Tensor, Torch::Tensor, name: :torch_tensor
|
|
107
89
|
end
|
|
108
90
|
|
data/ndav-torch-tensor.gemspec
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Gem::Specification.new do |s|
|
|
2
2
|
s.name = "ndav-torch-tensor"
|
|
3
|
-
s.version = "0.0.
|
|
3
|
+
s.version = "0.0.3"
|
|
4
4
|
s.authors = ["Kitaiti Makoto"]
|
|
5
5
|
s.summary = "N-Dimensional Array View for Torch::Tensors"
|
|
6
6
|
s.licenses = ["MIT"]
|
|
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
|
|
|
8
8
|
|
|
9
9
|
s.files = Dir.chdir(__dir__) {`git ls-files -z`.split("\x0")}
|
|
10
10
|
|
|
11
|
-
s.add_runtime_dependency "ndav"
|
|
11
|
+
s.add_runtime_dependency "ndav", ">= 0.0.5"
|
|
12
12
|
s.add_runtime_dependency "torch-rb"
|
|
13
13
|
|
|
14
14
|
s.add_development_dependency "rake"
|
data/test/test_torch_tensor.rb
CHANGED
|
@@ -14,6 +14,15 @@ class TestTorchTensor < Test::Unit::TestCase
|
|
|
14
14
|
assert_kind_of ::Torch::Tensor, ::Torch.from_ndav(@ndav)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
+
def test_memory_view
|
|
18
|
+
Fiddle::MemoryView.export @torch_tensor do |view|
|
|
19
|
+
assert_equal "s", view.format
|
|
20
|
+
assert_equal [3], view.shape
|
|
21
|
+
assert_equal [2], view.strides
|
|
22
|
+
assert_equal [1, 2, 3].pack("s*"), view.to_s
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
17
26
|
def test_ndav_to_torch_tensor
|
|
18
27
|
assert_kind_of ::Torch::Tensor, @ndav.to_torch_tensor
|
|
19
28
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ndav-torch-tensor
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kitaiti Makoto
|
|
@@ -15,14 +15,14 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - ">="
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version:
|
|
18
|
+
version: 0.0.5
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - ">="
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version:
|
|
25
|
+
version: 0.0.5
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: torch-rb
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -166,7 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
166
166
|
- !ruby/object:Gem::Version
|
|
167
167
|
version: '0'
|
|
168
168
|
requirements: []
|
|
169
|
-
rubygems_version: 4.0.
|
|
169
|
+
rubygems_version: 4.0.16
|
|
170
170
|
specification_version: 4
|
|
171
171
|
summary: N-Dimensional Array View for Torch::Tensors
|
|
172
172
|
test_files: []
|