ndav-ort_value 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 13877ca40a5983dabfe536ee671bcf6307e5b044fb0780e257232c2eeb210167
4
+ data.tar.gz: 5855988aa073034b98050b64dcc15991d8a96a9284be1f8c23778d02c3af4931
5
+ SHA512:
6
+ metadata.gz: 748ea91b2d55badf85d2d98ed65bfb06b52b1ca91946998584ac132a697d2fdef15b673a40ea85d7c40a6719947d7d09eacf4b3dc82ce8cdf1eb78bd0dd4f3cd
7
+ data.tar.gz: e6aff9a657a632dacdf90a26cb294129c011925ee44c9c7d16126b9a280be260f6784922903c3a510ce7712498d9f8d98a4394be0e077937ba338c1373248384
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ Gemfile.lock
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) Kitaiti Makoto
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,11 @@
1
+ OnnxRuntime::OrtValue::NDAV
2
+ ===========================
3
+
4
+ MemoryView and pointer support for [ONNX Runtime Ruby][].
5
+
6
+ LICENSE
7
+ ------
8
+
9
+ MIT license. See LICENSE.txt file.
10
+
11
+ [ONNX Runtime Ruby]: https://github.com/ankane/onnxruntime-ruby
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require "rake/testtask"
2
+ require "rubygems/tasks"
3
+
4
+ task default: :test
5
+
6
+ Gem::Tasks.new
7
+ Rake::TestTask.new
@@ -0,0 +1,147 @@
1
+ require "onnxruntime"
2
+ require "ndav"
3
+
4
+ class NDAV
5
+ module OrtValue
6
+ TYPE_TO_FORMAT = {
7
+ int8: "c",
8
+ uint8: "C",
9
+ int16: "s",
10
+ uint16: "S",
11
+ int32: "l",
12
+ uint32: "L",
13
+ int64: "q",
14
+ uint64: "Q",
15
+ float: "f",
16
+ double: "d"
17
+ }
18
+
19
+ FORMAT_TO_TYPE = ::NDAV::ITEM_SIZES.to_h {|format, size|
20
+ suffix = size * 8
21
+ type = case format
22
+ when "s!", "c", "s", "l", "q", "i", "i!", "l!", "q!"
23
+ :"int#{suffix}"
24
+ when "S!", "C", "S", "L", "Q", "I", "I!", "L!", "Q!"
25
+ :"uint#{suffix}"
26
+ when "f"
27
+ :float
28
+ when "d"
29
+ :double
30
+ end
31
+ [format, type]
32
+ }
33
+
34
+ TYPE_SIZES = TYPE_TO_FORMAT.transform_values {|format| ::NDAV::ITEM_SIZES[format]}
35
+
36
+ module FromNDAV
37
+ def from_memory_view(input)
38
+ from_ndav(::NDAV.new(input))
39
+ end
40
+
41
+ def from_fiddle_memory_view(input)
42
+ from_ndav(::NDAV.new(input))
43
+ end
44
+
45
+ def from_fiddle_pointer(input, shape:, element_type:, ref:)
46
+ format = TYPE_TO_FORMAT[element_type]
47
+ from_ndav(::NDAV.new(input, shape:, format:, lifetime: ref))
48
+ end
49
+
50
+ def from_ffi_memory_pointer(input, shape:, element_type:)
51
+ from_pointer(input, shape:, element_type:, ref: input)
52
+ end
53
+
54
+ def from_ffi_pointer(input, shape:, element_type:, ref:)
55
+ from_pointer(input, shape:, element_type:, ref:)
56
+ end
57
+
58
+ def from_ndav(input)
59
+ element_type = FORMAT_TO_TYPE[input.format]
60
+ ::OnnxRuntime::Utils.unsupported_type("NDAV", input.format) unless element_type
61
+
62
+ type_enum = ::OnnxRuntime::FFI::TensorElementDataType[element_type]
63
+ ::OnnxRuntime::Utils.unsupported_type("element", element_type) unless type_enum
64
+
65
+ shape = input.shape
66
+ input_node_dims = ::FFI::MemoryPointer.new(:int64, shape.size)
67
+ input_node_dims.write_array_of_int64(shape)
68
+
69
+ ptr = ::OnnxRuntime::Pointer.new
70
+ ::OnnxRuntime::Utils.check_status ::OnnxRuntime::FFI.api[:CreateTensorWithDataAsOrtValue].call(allocator_info, input.to_s, input.byte_size, input_node_dims, shape.size, type_enum, ptr.ref)
71
+
72
+ new(ptr.to_ptr, input)
73
+ end
74
+
75
+ def from_pointer(input, shape:, element_type:, ref:)
76
+ item_size = TYPE_SIZES[element_type]
77
+ byte_size = shape.reduce(item_size, :*)
78
+ if input.kind_of?(::Fiddle::MemoryView) && input.size != byte_size
79
+ raise ArgumentError, "size and shape doesn't match"
80
+ end
81
+
82
+ from_fiddle_pointer(Fiddle::Pointer.new(input.address, byte_size), shape:, element_type:, ref:)
83
+ end
84
+ end
85
+
86
+ module ToNDAV
87
+ def to_ndav
88
+ item_size = TYPE_SIZES[element_type]
89
+ Utils.unsupported_type("NDAV", element_type) unless item_size
90
+ byte_size = shape.reduce(item_size, :*)
91
+
92
+ ::NDAV.new(
93
+ ::Fiddle::Pointer.new(data_ptr.address, byte_size),
94
+ shape: shape.dup,
95
+ format: TYPE_TO_FORMAT[element_type],
96
+ lifetime: self
97
+ )
98
+ end
99
+ end
100
+
101
+ module FromOrtValue
102
+ def from_ort_value(array)
103
+ array.to_ndav
104
+ end
105
+ end
106
+
107
+ module ToOrtValue
108
+ def to_ort_value
109
+ ::OnnxRuntime::OrtValue.from_ndav(self)
110
+ end
111
+ end
112
+
113
+ module Converter
114
+ if defined? ::NDAV::Converter::OrtValue
115
+ def OrtValue(array, *, **)
116
+ if array.kind_of? ::NDAV
117
+ array.to_ort_value
118
+ elsif array.respond_to? :to_ort_value
119
+ array.to_ort_value
120
+ elsif array.respond_to? :to_ndav
121
+ array.to_ndav(*, **).to_ort_value
122
+ else
123
+ super
124
+ end
125
+ end
126
+ else
127
+ def OrtValue(array, *, **)
128
+ if array.kind_of? ::NDAV
129
+ array.to_ort_value
130
+ elsif array.respond_to? :to_ort_value
131
+ array.to_ort_value
132
+ elsif array.respond_to? :to_ndav
133
+ array.to_ndav(*, **).to_ort_value
134
+ else
135
+ ::NDAV.new(array, *, **).to_ort_value
136
+ end
137
+ end
138
+ end
139
+ end
140
+
141
+ ::OnnxRuntime::OrtValue.extend FromNDAV
142
+ ::OnnxRuntime::OrtValue.include ToNDAV
143
+ ::NDAV.extend FromOrtValue
144
+ ::NDAV.include ToOrtValue
145
+ ::NDAV::Converter.singleton_class.prepend Converter
146
+ end
147
+ end
@@ -0,0 +1,20 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "ndav-ort_value"
3
+ s.version = "0.0.1"
4
+ s.authors = ["Kitaiti Makoto"]
5
+ s.summary = "OnnxRuntime extension for MemoryView exporters and pointers"
6
+ s.licenses = ["MIT"]
7
+
8
+ s.add_runtime_dependency "onnxruntime"
9
+ s.add_runtime_dependency "ndav"
10
+
11
+ s.files = Dir.chdir(__dir__) {`git ls-files -z`.split("\x0")}
12
+
13
+ s.add_development_dependency "rake"
14
+ s.add_development_dependency "test-unit"
15
+ s.add_development_dependency "test-unit-notify"
16
+ s.add_development_dependency "test-unit-rr"
17
+ s.add_development_dependency "terminal-notifier" if RUBY_PLATFORM.match?(/darwin/)
18
+ s.add_development_dependency "rubygems-tasks"
19
+ s.add_development_dependency "red-arrow"
20
+ end
metadata ADDED
@@ -0,0 +1,169 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ndav-ort_value
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Kitaiti Makoto
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: onnxruntime
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: ndav
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: rake
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: test-unit
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: test-unit-notify
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: test-unit-rr
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ - !ruby/object:Gem::Dependency
97
+ name: terminal-notifier
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rubygems-tasks
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ - !ruby/object:Gem::Dependency
125
+ name: red-arrow
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ executables: []
139
+ extensions: []
140
+ extra_rdoc_files: []
141
+ files:
142
+ - ".gitignore"
143
+ - Gemfile
144
+ - LICENSE.txt
145
+ - README.md
146
+ - Rakefile
147
+ - lib/ndav/ort_value.rb
148
+ - ndav-ort_value.gemspec
149
+ licenses:
150
+ - MIT
151
+ metadata: {}
152
+ rdoc_options: []
153
+ require_paths:
154
+ - lib
155
+ required_ruby_version: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ required_rubygems_version: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ requirements: []
166
+ rubygems_version: 4.0.6
167
+ specification_version: 4
168
+ summary: OnnxRuntime extension for MemoryView exporters and pointers
169
+ test_files: []