Module: NDAV::Numo::NArray

Defined in:
lib/ndav/numo/narray.rb

Defined Under Namespace

Modules: Converter, 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

.address_for_read(obj) ⇒ Object



8
9
10
11
12
13
14
# File 'ext/narray.c', line 8

static VALUE
ndav_numo_narray_s_address_for_read(VALUE self, VALUE obj)
{
  void* ptr = na_get_pointer_for_read(obj);

  return PTR2NUM(ptr);
}

.readonly?(obj) ⇒ Boolean

Returns:

  • (Boolean)


16
17
18
19
20
21
22
23
24
25
26
27
# File 'ext/narray.c', line 16

static VALUE
ndav_numo_narray_s_readonly_p(VALUE self, VALUE obj)
{
  if (OBJ_FROZEN(obj)) {
    return Qtrue;
  }

  narray_t *na;
  GetNArray(obj, na);

  return NA_TYPE(na) == NARRAY_VIEW_T && OBJ_FROZEN(NA_VIEW_DATA(na)) ? Qtrue : Qfalse;
}

.strides(obj) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'ext/narray.c', line 29

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)) {
        return Qnil;
      }
      rb_ary_store(strides, axis, SSIZET2NUM(NA_STRIDE_AT(na, i - 1)));
      break;
    default:
      return Qnil;
    }
  }

  return strides;
}