Module: NDAV::Numo::NArray
- Defined in:
- lib/ndav/numo/narray.rb
Defined Under Namespace
Modules: Converter, FFI, FromNDAV, MemoryViewable
Constant Summary
collapse
- CLASS_TO_FORMAT =
{
::Numo::Int8 => "c",
::Numo::UInt8 => "C",
::Numo::Int16 => "s",
::Numo::UInt16 => "S",
::Numo::Int32 => "l",
::Numo::UInt32 => "L",
::Numo::Int64 => "q",
::Numo::UInt64 => "Q",
::Numo::SFloat => "f",
::Numo::DFloat => "d"
}
- FORMAT_TO_CLASS =
CLASS_TO_FORMAT.invert
Class Method Summary
collapse
Class Method Details
.na_get_offset(numo) ⇒ Object
49
50
51
|
# File 'lib/ndav/numo/narray.rb', line 49
def na_get_offset(numo)
FFI.nary_get_offset(Fiddle.dlwrap(numo))
end
|
.na_get_pointer_for_read(numo) ⇒ Object
41
42
43
|
# File 'lib/ndav/numo/narray.rb', line 41
def na_get_pointer_for_read(numo)
FFI.nary_get_pointer_for_read(Fiddle.dlwrap(numo))
end
|
.na_get_pointer_for_read_write(numo) ⇒ Object
45
46
47
|
# File 'lib/ndav/numo/narray.rb', line 45
def na_get_pointer_for_read_write(numo)
FFI.nary_get_pointer_for_read_write(Fiddle.dlwrap(numo))
end
|
.pointer_for_read(numo) ⇒ Object
53
54
55
56
57
|
# File 'lib/ndav/numo/narray.rb', line 53
def pointer_for_read(numo)
ptr = na_get_pointer_for_read(numo) + na_get_offset(numo)
ptr.size = numo.byte_size
ptr
end
|
.pointer_for_write(numo) ⇒ Object
59
60
61
62
63
|
# File 'lib/ndav/numo/narray.rb', line 59
def pointer_for_write(numo)
ptr = na_get_pointer_for_read_write(numo) + na_get_offset(numo)
ptr.size = numo.byte_size
ptr
end
|
.strides(obj) ⇒ Object
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'ext/narray.c', line 8
static VALUE
ndav_numo_narray_s_strides(VALUE self, VALUE obj)
{
narray_t *na;
GetNArray(obj, na);
int ndim = NA_NDIM(na);
size_t *shape = NA_SHAPE(na);
VALUE strides = rb_ary_new_capa(ndim);
unsigned char type = NA_TYPE(na);
bool is_row_major = TEST_ROW_MAJOR(obj);
ssize_t stride;
if (type == NARRAY_DATA_T) {
stride = na_get_elmsz(obj);
}
for (int i = ndim; i > 0; --i) {
int axis = is_row_major ? i - 1 : ndim - i;
switch (type) {
case NARRAY_DATA_T:
rb_ary_store(strides, axis, SSIZET2NUM(stride));
stride *= shape[i - 1];
break;
case NARRAY_VIEW_T:
if (NA_IS_INDEX_AT(na, i - 1)) {
rb_raise(rb_eArgError, "strides not defined for index-backed array");
}
rb_ary_store(strides, axis, SSIZET2NUM(NA_STRIDE_AT(na, i - 1)));
break;
default:
return Qnil;
}
}
return strides;
}
|