ndav-numo-narray 0.0.4 → 0.0.5
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/ext/narray.c +1 -24
- data/lib/ndav/numo/narray.rb +74 -14
- data/ndav-numo-narray.gemspec +2 -2
- data/test/test_converter.rb +8 -0
- data/test/test_pointer.rb +49 -0
- metadata +4 -4
- data/test/test_address.rb +0 -27
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: beb01a99fd5dc21a663a24670645f31481edd507106bed7737f31223c1e666a8
|
|
4
|
+
data.tar.gz: 7c3f16c422223a95c7fe0ed71e377dce9ee497cb72460ea15406b8150dc555ff
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 72f42d4ac0170bc12d69d68b2c4d7ce8674419f39a24321b90696b38af8faf1f901cdaaf6ef3880a4003137b0bc61e1571f03e9d56b0fdc91516834c2df82a80
|
|
7
|
+
data.tar.gz: 03ba05a8b1fd7757f2e5fbbad4f201c92cf95a42bff75f2b13cdc998e85b5b07b766d3893402256122439d2d87dcf43e3c279ed7a689ff165acac65b238658f6
|
data/ext/narray.c
CHANGED
|
@@ -5,27 +5,6 @@
|
|
|
5
5
|
#include <ruby/memory_view.h>
|
|
6
6
|
#include <numo/narray.h>
|
|
7
7
|
|
|
8
|
-
static VALUE
|
|
9
|
-
ndav_numo_narray_s_address_for_read(VALUE self, VALUE obj)
|
|
10
|
-
{
|
|
11
|
-
void* ptr = na_get_pointer_for_read(obj);
|
|
12
|
-
|
|
13
|
-
return PTR2NUM(ptr);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
static VALUE
|
|
17
|
-
ndav_numo_narray_s_readonly_p(VALUE self, VALUE obj)
|
|
18
|
-
{
|
|
19
|
-
if (OBJ_FROZEN(obj)) {
|
|
20
|
-
return Qtrue;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
narray_t *na;
|
|
24
|
-
GetNArray(obj, na);
|
|
25
|
-
|
|
26
|
-
return NA_TYPE(na) == NARRAY_VIEW_T && OBJ_FROZEN(NA_VIEW_DATA(na)) ? Qtrue : Qfalse;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
8
|
static VALUE
|
|
30
9
|
ndav_numo_narray_s_strides(VALUE self, VALUE obj)
|
|
31
10
|
{
|
|
@@ -52,7 +31,7 @@ ndav_numo_narray_s_strides(VALUE self, VALUE obj)
|
|
|
52
31
|
break;
|
|
53
32
|
case NARRAY_VIEW_T:
|
|
54
33
|
if (NA_IS_INDEX_AT(na, i - 1)) {
|
|
55
|
-
|
|
34
|
+
rb_raise(rb_eArgError, "strides not defined for index-backed array");
|
|
56
35
|
}
|
|
57
36
|
rb_ary_store(strides, axis, SSIZET2NUM(NA_STRIDE_AT(na, i - 1)));
|
|
58
37
|
break;
|
|
@@ -71,8 +50,6 @@ Init_narray(void)
|
|
|
71
50
|
|
|
72
51
|
VALUE mNArray = rb_path2class("NDAV::Numo::NArray");
|
|
73
52
|
|
|
74
|
-
rb_define_singleton_method(mNArray, "address_for_read",ndav_numo_narray_s_address_for_read, 1);
|
|
75
|
-
rb_define_singleton_method(mNArray, "readonly?", ndav_numo_narray_s_readonly_p, 1);
|
|
76
53
|
rb_define_singleton_method(mNArray, "strides", ndav_numo_narray_s_strides, 1);
|
|
77
54
|
}
|
|
78
55
|
|
data/lib/ndav/numo/narray.rb
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
require "ndav"
|
|
2
|
-
|
|
2
|
+
numo_name = "numo/narray/alt"
|
|
3
|
+
require numo_name
|
|
4
|
+
require "fiddle/import"
|
|
3
5
|
|
|
4
6
|
class NDAV
|
|
5
7
|
module Numo
|
|
@@ -18,37 +20,95 @@ class NDAV
|
|
|
18
20
|
}
|
|
19
21
|
|
|
20
22
|
FORMAT_TO_CLASS = CLASS_TO_FORMAT.invert
|
|
23
|
+
case IO::Buffer::HOST_ENDIAN
|
|
24
|
+
when IO::Buffer::LITTLE_ENDIAN
|
|
25
|
+
FORMAT_TO_CLASS.update({
|
|
26
|
+
"v" => ::Numo::UInt16,
|
|
27
|
+
"V" => ::Numo::UInt32,
|
|
28
|
+
"e" => ::Numo::SFloat,
|
|
29
|
+
"E" => ::Numo::DFloat
|
|
30
|
+
})
|
|
31
|
+
when IO::Buffer::BIG_ENDIAN
|
|
32
|
+
FORMAT_TO_CLASS.update({
|
|
33
|
+
"n" => ::Numo::UInt16,
|
|
34
|
+
"N" => ::Numo::UInt32,
|
|
35
|
+
"g" => ::Numo::SFloat,
|
|
36
|
+
"G" => ::Numo::DFloat
|
|
37
|
+
})
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
class << self
|
|
41
|
+
def na_get_pointer_for_read(numo)
|
|
42
|
+
FFI.nary_get_pointer_for_read(Fiddle.dlwrap(numo))
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def na_get_pointer_for_read_write(numo)
|
|
46
|
+
FFI.nary_get_pointer_for_read_write(Fiddle.dlwrap(numo))
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def na_get_offset(numo)
|
|
50
|
+
FFI.nary_get_offset(Fiddle.dlwrap(numo))
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def pointer_for_read(numo)
|
|
54
|
+
ptr = na_get_pointer_for_read(numo) + na_get_offset(numo)
|
|
55
|
+
ptr.size = numo.byte_size
|
|
56
|
+
ptr
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def pointer_for_write(numo)
|
|
60
|
+
ptr = na_get_pointer_for_read_write(numo) + na_get_offset(numo)
|
|
61
|
+
ptr.size = numo.byte_size
|
|
62
|
+
ptr
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
module FFI
|
|
67
|
+
extend Fiddle::Importer
|
|
68
|
+
|
|
69
|
+
numo_dl = $LOADED_FEATURES.find {|feature| feature.end_with?("numo/narray/narray.#{RbConfig::CONFIG['DLEXT']}")}
|
|
70
|
+
dlload numo_dl
|
|
71
|
+
typealias "VALUE", "uintptr_t"
|
|
72
|
+
extern "char* nary_get_pointer_for_read(VALUE)"
|
|
73
|
+
extern "char* nary_get_pointer_for_read_write(VALUE)"
|
|
74
|
+
extern "size_t nary_get_offset(VALUE self)"
|
|
75
|
+
end
|
|
21
76
|
|
|
22
77
|
module FromNDAV
|
|
23
78
|
def from_ndav(ndav)
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
raise ArgumentError, "
|
|
79
|
+
format = ndav.format
|
|
80
|
+
cls = FORMAT_TO_CLASS[format]
|
|
81
|
+
raise ArgumentError, "unsupported format: #{format}, currently supported: #{FORMAT_TO_CLASS.keys}" unless cls
|
|
27
82
|
|
|
28
|
-
|
|
83
|
+
shape = ndav.shape
|
|
84
|
+
if ndav.row_major_contiguous?
|
|
85
|
+
cls.from_binary(ndav.to_s, shape)
|
|
86
|
+
elsif ndav.column_major_contiguous?
|
|
87
|
+
cls.from_binary(ndav.to_s, shape.reverse).transpose
|
|
88
|
+
else
|
|
89
|
+
# TODO: Allocate enough memory, know that size, pass binary to from_binary, and reshape and restrides
|
|
90
|
+
raise "Currently, non-contiguous NDAV not supported"
|
|
91
|
+
end
|
|
29
92
|
end
|
|
30
93
|
end
|
|
31
94
|
|
|
32
95
|
module MemoryViewable
|
|
33
|
-
def ndav_descriptor(**)
|
|
34
|
-
unless contiguous?
|
|
35
|
-
warn "only contiguous NArray is supported"
|
|
36
|
-
return false
|
|
37
|
-
end
|
|
38
|
-
|
|
96
|
+
def ndav_descriptor(writable: false, column_major: false, **)
|
|
39
97
|
format = CLASS_TO_FORMAT[self.class]
|
|
40
98
|
unless format
|
|
41
99
|
warn "unsupported class: #{self.class}, currently supported: #{CLASS_TO_FORMAT.keys}"
|
|
42
100
|
return false
|
|
43
101
|
end
|
|
44
102
|
|
|
103
|
+
ptr = writable ? ::NDAV::Numo::NArray.pointer_for_write(self) :
|
|
104
|
+
::NDAV::Numo::NArray.pointer_for_read(self)
|
|
45
105
|
{
|
|
46
|
-
data:
|
|
106
|
+
data: ptr,
|
|
47
107
|
shape:,
|
|
48
|
-
strides: ::NDAV::Numo::NArray.strides(self),
|
|
108
|
+
strides: ::NDAV::Numo::NArray.strides(self) || ::NDAV.default_strides(shape:, item_size: ITEM_SIZES[format], row_major: !column_major),
|
|
49
109
|
format:,
|
|
50
110
|
byte_size:,
|
|
51
|
-
readonly?:
|
|
111
|
+
readonly?: !writable,
|
|
52
112
|
sub_offsets: nil
|
|
53
113
|
}
|
|
54
114
|
end
|
data/ndav-numo-narray.gemspec
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Gem::Specification.new do |s|
|
|
2
2
|
s.name = "ndav-numo-narray"
|
|
3
|
-
s.version = "0.0.
|
|
3
|
+
s.version = "0.0.5"
|
|
4
4
|
s.authors = ["Kitaiti Makoto"]
|
|
5
5
|
s.summary = "N-Dimensional Array View for Numo::NArray"
|
|
6
6
|
s.licenses = ["BSD-3-Clause"]
|
|
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
|
|
|
9
9
|
s.files = Dir.chdir(__dir__) {`git ls-files -z`.split("\x0")}
|
|
10
10
|
s.extensions << "ext/extconf.rb"
|
|
11
11
|
|
|
12
|
-
s.add_runtime_dependency "ndav", ">= 0.0.
|
|
12
|
+
s.add_runtime_dependency "ndav", ">= 0.0.6"
|
|
13
13
|
s.add_runtime_dependency "numo-narray-alt"
|
|
14
14
|
|
|
15
15
|
s.add_development_dependency "rake"
|
data/test/test_converter.rb
CHANGED
|
@@ -22,6 +22,14 @@ class TestConverter < Test::Unit::TestCase
|
|
|
22
22
|
assert_kind_of ::NDAV, @numo_narray.to_ndav
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
+
def test_non_contiguous_numo_narray_to_ndav
|
|
26
|
+
pend
|
|
27
|
+
|
|
28
|
+
numo_narray = ::Numo::Int16[1, 2, 3, 4, 5, 6][(0...6).step(2)]
|
|
29
|
+
|
|
30
|
+
assert_equal [1, 2, 3], numo_narray.to_ndav.to_numo_narray.to_a
|
|
31
|
+
end
|
|
32
|
+
|
|
25
33
|
def test_NDAV
|
|
26
34
|
assert_kind_of ::NDAV, ::NDAV::Converter::NDAV(@numo_narray)
|
|
27
35
|
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require_relative "helper"
|
|
2
|
+
|
|
3
|
+
class TestPointer < Test::Unit::TestCase
|
|
4
|
+
def test_pointer_for_read
|
|
5
|
+
numo = ::Numo::Int16[1, 2, 3]
|
|
6
|
+
|
|
7
|
+
assert_raise TypeError do
|
|
8
|
+
::NDAV::Numo::NArray.pointer_for_read(Object.new)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
ptr = ::NDAV::Numo::NArray.pointer_for_read(numo)
|
|
12
|
+
assert_instance_of ::Fiddle::Pointer, ptr
|
|
13
|
+
assert_equal [1, 2, 3].pack("s*"), ptr.to_s(numo.byte_size)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_pointer_for_write
|
|
17
|
+
numo = ::Numo::Int16[1, 2, 3]
|
|
18
|
+
|
|
19
|
+
assert_raise TypeError do
|
|
20
|
+
::NDAV::Numo::NArray.pointer_for_write(Object.new)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
ptr = ::NDAV::Numo::NArray.pointer_for_write(numo)
|
|
24
|
+
assert_instance_of ::Fiddle::Pointer, ptr
|
|
25
|
+
|
|
26
|
+
numo[0] = 4
|
|
27
|
+
assert_equal [4, 2, 3].pack("s*"), ptr.to_s(numo.byte_size)
|
|
28
|
+
|
|
29
|
+
::Fiddle::Pointer.write(ptr, [7, 8, 9].pack("s*"))
|
|
30
|
+
assert_equal ::Numo::Int16[7, 8, 9], numo
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_pointer_for_read_view
|
|
34
|
+
numo = ::Numo::Int16[0, 1, 2, 3]
|
|
35
|
+
view = numo[1..]
|
|
36
|
+
ptr = ::NDAV::Numo::NArray.pointer_for_read(view)
|
|
37
|
+
|
|
38
|
+
assert_equal [1, 2, 3].pack("s*"), ptr.to_s(view.byte_size)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_pointer_for_write_view
|
|
42
|
+
numo = ::Numo::Int16[0, 1, 2, 3]
|
|
43
|
+
view = numo[1..]
|
|
44
|
+
ptr = ::NDAV::Numo::NArray.pointer_for_write(view)
|
|
45
|
+
|
|
46
|
+
view[0] = 4
|
|
47
|
+
assert_equal [4, 2, 3].pack("s*"), ptr.to_s(view.byte_size)
|
|
48
|
+
end
|
|
49
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ndav-numo-narray
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.5
|
|
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: 0.0.
|
|
18
|
+
version: 0.0.6
|
|
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: 0.0.
|
|
25
|
+
version: 0.0.6
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: numo-narray-alt
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -164,9 +164,9 @@ files:
|
|
|
164
164
|
- lib/ndav/numo/narray.rb
|
|
165
165
|
- ndav-numo-narray.gemspec
|
|
166
166
|
- test/helper.rb
|
|
167
|
-
- test/test_address.rb
|
|
168
167
|
- test/test_converter.rb
|
|
169
168
|
- test/test_package.rb
|
|
169
|
+
- test/test_pointer.rb
|
|
170
170
|
homepage: https://gitlab.com/KitaitiMakoto/ndav-numo-narray
|
|
171
171
|
licenses:
|
|
172
172
|
- BSD-3-Clause
|
data/test/test_address.rb
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
require_relative "helper"
|
|
2
|
-
|
|
3
|
-
class TestAddress < Test::Unit::TestCase
|
|
4
|
-
def test_address_for_read
|
|
5
|
-
numo = ::Numo::Int16[1, 2, 3]
|
|
6
|
-
|
|
7
|
-
assert_raise TypeError do
|
|
8
|
-
::NDAV::Numo::NArray.address_for_read(Object.new)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
assert_instance_of Integer, ::NDAV::Numo::NArray.address_for_read(numo)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def test_pointer_for_read
|
|
15
|
-
numo = ::Numo::Int16[1, 2, 3]
|
|
16
|
-
address = ::NDAV::Numo::NArray.address_for_read(numo)
|
|
17
|
-
|
|
18
|
-
ptr = ::Fiddle::Pointer.new(address, numo.byte_size)
|
|
19
|
-
assert_equal [1, 2, 3].pack("s*"), ptr.to_s(numo.byte_size)
|
|
20
|
-
|
|
21
|
-
numo[0] = 4
|
|
22
|
-
assert_equal [4, 2, 3].pack("s*"), ptr.to_s(numo.byte_size)
|
|
23
|
-
|
|
24
|
-
::Fiddle::Pointer.write(address, [7, 8, 9].pack("s*"))
|
|
25
|
-
assert_equal ::Numo::Int16[7, 8, 9], numo
|
|
26
|
-
end
|
|
27
|
-
end
|