ndav-numo-narray 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/README.md +21 -1
- data/ext/extconf.rb +3 -3
- data/ext/narray.c +42 -5
- data/lib/ndav/numo/narray.rb +24 -11
- data/ndav-numo-narray.gemspec +2 -2
- data/test/test_address.rb +6 -7
- 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: 190876a415d35546ac7c0d2d9f40f1a38b8e7caa183fac3b8785b69c3ed52fb6
|
|
4
|
+
data.tar.gz: 2821b6cff34294cf2720a2323ac6ee4b6df69f579beb61ab6d45421051117c72
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c80b97550700626dcaf02917f9c8bfe381aa179fbd1582fd86a8f671648111ea471a99752dff6344fde16243014915fdccfb708aead4649aa82def93e9329077
|
|
7
|
+
data.tar.gz: b1684caf9670469949ce16dbf2171660416bf67e866a12f0280058d74445604f51b4413f7b9e2fdd1f70db5934f63a90f097dd8d6a4217661f008d0e1e0da070
|
data/README.md
CHANGED
|
@@ -1,12 +1,32 @@
|
|
|
1
1
|
NDAV::Numo::NArray
|
|
2
2
|
==================
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
[NDAV][] bridge for [Numo::NArray][] ([numo-narray-alt][]).
|
|
5
|
+
|
|
6
|
+
SYNOPSIS
|
|
7
|
+
--------
|
|
8
|
+
|
|
9
|
+
```ruby
|
|
10
|
+
require "ndav/numo/narray"
|
|
11
|
+
|
|
12
|
+
numo = Numo::DFloat.new(2, 3).seq # => Numo::DFloat
|
|
13
|
+
ndav = numo.to_ndav # => NDAV
|
|
14
|
+
numo = ndav.to_numo_narray # => Numo::DFloat
|
|
15
|
+
|
|
16
|
+
ndav = NDAV.from_numo_narray(numo) # => NDAV
|
|
17
|
+
numo = Numo::DFloat.from_ndav(ndav) # => Numo::DFloat
|
|
18
|
+
numo = Numo::NDarray.from_ndav(ndav) # => Numo::DFloat
|
|
19
|
+
|
|
20
|
+
include NDAV::Converter
|
|
21
|
+
ndav = NDAV(numo) # => NDAV
|
|
22
|
+
numo = NumoNArray(ndav) # => Numo::NArray
|
|
23
|
+
```
|
|
5
24
|
|
|
6
25
|
LICENSE
|
|
7
26
|
-------
|
|
8
27
|
|
|
9
28
|
3-Clause BSD License. See LICENSE.txt file.
|
|
10
29
|
|
|
30
|
+
[NDAV]: https://kitaitimakoto.gitlab.io/ndav/
|
|
11
31
|
[Numo::NArray]: https://ruby-numo.github.io/narray/
|
|
12
32
|
[numo-narray-alt]: https://github.com/yoshoku/numo-narray-alt
|
data/ext/extconf.rb
CHANGED
|
@@ -2,8 +2,8 @@ require "mkmf"
|
|
|
2
2
|
|
|
3
3
|
dependency = "numo-narray-alt"
|
|
4
4
|
header = "numo/narray.h"
|
|
5
|
-
|
|
6
|
-
$INCFLAGS = "-I#{
|
|
7
|
-
have_header(header) || abort
|
|
5
|
+
lib_dir = File.join(Gem::Specification.find_by_name(dependency).full_gem_path, "lib/numo")
|
|
6
|
+
$INCFLAGS = "-I#{lib_dir} #{$INCFLAGS}"
|
|
7
|
+
have_header(header) || abort("#{header} not found in #{dependency}")
|
|
8
8
|
|
|
9
9
|
create_makefile "ndav/numo/narray"
|
data/ext/narray.c
CHANGED
|
@@ -6,23 +6,60 @@
|
|
|
6
6
|
#include <numo/narray.h>
|
|
7
7
|
|
|
8
8
|
static VALUE
|
|
9
|
-
|
|
9
|
+
ndav_numo_narray_s_address_for_read(VALUE self, VALUE obj)
|
|
10
10
|
{
|
|
11
11
|
void* ptr = na_get_pointer_for_read(obj);
|
|
12
12
|
|
|
13
13
|
return PTR2NUM(ptr);
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
static VALUE
|
|
17
|
+
ndav_numo_narray_s_strides(VALUE self, VALUE obj)
|
|
18
|
+
{
|
|
19
|
+
narray_t *na;
|
|
20
|
+
GetNArray(obj, na);
|
|
21
|
+
int ndim = NA_NDIM(na);
|
|
22
|
+
size_t *shape = NA_SHAPE(na);
|
|
23
|
+
VALUE strides = rb_ary_new_capa(ndim);
|
|
24
|
+
unsigned char type = NA_TYPE(na);
|
|
25
|
+
bool is_row_major = TEST_ROW_MAJOR(obj);
|
|
26
|
+
ssize_t stride;
|
|
27
|
+
|
|
28
|
+
if (type == NARRAY_DATA_T) {
|
|
29
|
+
stride = na_get_elmsz(obj);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
for (int i = ndim; i > 0; --i) {
|
|
33
|
+
int axis = is_row_major ? i - 1 : ndim - i;
|
|
34
|
+
|
|
35
|
+
switch (type) {
|
|
36
|
+
case NARRAY_DATA_T:
|
|
37
|
+
rb_ary_store(strides, axis, SSIZET2NUM(stride));
|
|
38
|
+
stride *= shape[i - 1];
|
|
39
|
+
break;
|
|
40
|
+
case NARRAY_VIEW_T:
|
|
41
|
+
if (NA_IS_INDEX_AT(na, i - 1)) {
|
|
42
|
+
return Qnil;
|
|
43
|
+
}
|
|
44
|
+
rb_ary_store(strides, axis, SSIZET2NUM(NA_STRIDE_AT(na, i - 1)));
|
|
45
|
+
break;
|
|
46
|
+
default:
|
|
47
|
+
return Qnil;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return strides;
|
|
52
|
+
}
|
|
53
|
+
|
|
16
54
|
void
|
|
17
55
|
Init_narray(void)
|
|
18
56
|
{
|
|
19
57
|
rb_require("numo/narray/alt");
|
|
20
58
|
|
|
21
|
-
VALUE
|
|
22
|
-
VALUE mNumo = rb_define_module_under(cNDAV, "Numo");
|
|
23
|
-
VALUE mNArray = rb_define_module_under(mNumo, "NArray");
|
|
59
|
+
VALUE mNArray = rb_path2class("NDAV::Numo::NArray");
|
|
24
60
|
|
|
25
|
-
rb_define_singleton_method(mNArray, "
|
|
61
|
+
rb_define_singleton_method(mNArray, "address_for_read",ndav_numo_narray_s_address_for_read, 1);
|
|
62
|
+
rb_define_singleton_method(mNArray, "strides", ndav_numo_narray_s_strides, 1);
|
|
26
63
|
}
|
|
27
64
|
|
|
28
65
|
#endif /* NDAV_NUMO_NARRAY_H */
|
data/lib/ndav/numo/narray.rb
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
require "ndav"
|
|
2
2
|
require "numo/narray/alt"
|
|
3
|
-
require "ndav/numo/narray.so"
|
|
4
3
|
|
|
5
4
|
class NDAV
|
|
6
5
|
module Numo
|
|
@@ -24,22 +23,34 @@ class NDAV
|
|
|
24
23
|
def from_ndav(ndav)
|
|
25
24
|
cls = FORMAT_TO_CLASS[ndav.format]
|
|
26
25
|
raise ArgumentError, "unsupported format: #{ndav.format}, currently supported: #{FORMAT_TO_CLASS.keys}" unless cls
|
|
26
|
+
raise ArgumentError, "class and format mismatch: #{cls} and #{ndav.format}" unless CLASS_TO_FORMAT[cls] == ndav.format
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
address = ::NDAV::Numo::NArray.address(array)
|
|
30
|
-
::Fiddle::Pointer.write address, ndav.to_s
|
|
31
|
-
array.instance_variable_set(:@ndav, ndav) # keep reference to NDAV to prevent GC
|
|
32
|
-
array
|
|
28
|
+
cls.from_binary(ndav.to_s, ndav.shape)
|
|
33
29
|
end
|
|
34
30
|
end
|
|
35
31
|
|
|
36
|
-
module
|
|
37
|
-
def
|
|
32
|
+
module MemoryViewable
|
|
33
|
+
def ndav_descriptor(flags = ::NDAV::Flags::FLAGS[:simple])
|
|
34
|
+
unless contiguous?
|
|
35
|
+
warn "only contiguous NArray is supported"
|
|
36
|
+
return false
|
|
37
|
+
end
|
|
38
|
+
|
|
38
39
|
format = CLASS_TO_FORMAT[self.class]
|
|
39
|
-
|
|
40
|
+
unless format
|
|
41
|
+
warn "unsupported class: #{self.class}, currently supported: #{CLASS_TO_FORMAT.keys}"
|
|
42
|
+
return false
|
|
43
|
+
end
|
|
40
44
|
|
|
41
|
-
|
|
42
|
-
|
|
45
|
+
{
|
|
46
|
+
data: ::Fiddle::Pointer.new(::NDAV::Numo::NArray.address_for_read(self), byte_size),
|
|
47
|
+
shape:,
|
|
48
|
+
strides: ::NDAV::Numo::NArray.strides(self),
|
|
49
|
+
format:,
|
|
50
|
+
byte_size:,
|
|
51
|
+
readonly?: true, # TODO: Consier to define #readonly? at C layer
|
|
52
|
+
sub_offsets: nil
|
|
53
|
+
}
|
|
43
54
|
end
|
|
44
55
|
end
|
|
45
56
|
|
|
@@ -65,3 +76,5 @@ class NDAV
|
|
|
65
76
|
|
|
66
77
|
register ::Numo::NArray, Numo::NArray, name: :numo_narray
|
|
67
78
|
end
|
|
79
|
+
|
|
80
|
+
require "ndav/numo/narray.so"
|
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.3"
|
|
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.5"
|
|
13
13
|
s.add_runtime_dependency "numo-narray-alt"
|
|
14
14
|
|
|
15
15
|
s.add_development_dependency "rake"
|
data/test/test_address.rb
CHANGED
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
require_relative "helper"
|
|
2
2
|
|
|
3
3
|
class TestAddress < Test::Unit::TestCase
|
|
4
|
-
def
|
|
4
|
+
def test_address_for_read
|
|
5
5
|
numo = ::Numo::Int16[1, 2, 3]
|
|
6
6
|
|
|
7
7
|
assert_raise TypeError do
|
|
8
|
-
::NDAV::Numo::NArray.
|
|
8
|
+
::NDAV::Numo::NArray.address_for_read(Object.new)
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
assert_instance_of Integer, ::NDAV::Numo::NArray.
|
|
11
|
+
assert_instance_of Integer, ::NDAV::Numo::NArray.address_for_read(numo)
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
def
|
|
14
|
+
def test_pointer_for_read
|
|
15
15
|
numo = ::Numo::Int16[1, 2, 3]
|
|
16
|
-
address = ::NDAV::Numo::NArray.
|
|
16
|
+
address = ::NDAV::Numo::NArray.address_for_read(numo)
|
|
17
17
|
|
|
18
|
-
ptr = ::Fiddle::Pointer
|
|
19
|
-
ptr.size = numo.byte_size
|
|
18
|
+
ptr = ::Fiddle::Pointer.new(address, numo.byte_size)
|
|
20
19
|
assert_equal [1, 2, 3].pack("s*"), ptr.to_s(numo.byte_size)
|
|
21
20
|
|
|
22
21
|
numo[0] = 4
|
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.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: 0.0.
|
|
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: 0.0.
|
|
25
|
+
version: 0.0.5
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: numo-narray-alt
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -185,7 +185,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
185
185
|
- !ruby/object:Gem::Version
|
|
186
186
|
version: '0'
|
|
187
187
|
requirements: []
|
|
188
|
-
rubygems_version: 4.0.
|
|
188
|
+
rubygems_version: 4.0.16
|
|
189
189
|
specification_version: 4
|
|
190
190
|
summary: N-Dimensional Array View for Numo::NArray
|
|
191
191
|
test_files: []
|