You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by we...@apache.org on 2017/04/19 21:17:45 UTC
arrow git commit: ARROW-846: [GLib] Add GArrowTensor,
GArrowInt8Tensor and GArrowUInt8Tensor
Repository: arrow
Updated Branches:
refs/heads/master 74f89cfbe -> 0dc6fe8f3
ARROW-846: [GLib] Add GArrowTensor, GArrowInt8Tensor and GArrowUInt8Tensor
Author: Kouhei Sutou <ko...@clear-code.com>
Closes #560 from kou/glib-add-tensor and squashes the following commits:
ed949d4 [Kouhei Sutou] [GLib] Support running tests on Ubuntu 14.04
39d40f0 [Kouhei Sutou] [GLib] Add GArrowTensor, GArrowInt8Tensor and GArrowUInt8Tensor
Project: http://git-wip-us.apache.org/repos/asf/arrow/repo
Commit: http://git-wip-us.apache.org/repos/asf/arrow/commit/0dc6fe8f
Tree: http://git-wip-us.apache.org/repos/asf/arrow/tree/0dc6fe8f
Diff: http://git-wip-us.apache.org/repos/asf/arrow/diff/0dc6fe8f
Branch: refs/heads/master
Commit: 0dc6fe8f33befaaa5fc8055b6c157ac1ccb09e6b
Parents: 74f89cf
Author: Kouhei Sutou <ko...@clear-code.com>
Authored: Wed Apr 19 17:17:38 2017 -0400
Committer: Wes McKinney <we...@twosigma.com>
Committed: Wed Apr 19 17:17:38 2017 -0400
----------------------------------------------------------------------
c_glib/arrow-glib/Makefile.am | 8 +
c_glib/arrow-glib/arrow-glib.h | 3 +
c_glib/arrow-glib/arrow-glib.hpp | 2 +
c_glib/arrow-glib/int8-tensor.cpp | 105 ++++++++
c_glib/arrow-glib/int8-tensor.h | 79 ++++++
c_glib/arrow-glib/numeric-tensor.hpp | 64 +++++
c_glib/arrow-glib/tensor.cpp | 390 ++++++++++++++++++++++++++++++
c_glib/arrow-glib/tensor.h | 77 ++++++
c_glib/arrow-glib/tensor.hpp | 27 +++
c_glib/arrow-glib/uint8-tensor.cpp | 105 ++++++++
c_glib/arrow-glib/uint8-tensor.h | 79 ++++++
c_glib/test/helper/omittable.rb | 28 +++
c_glib/test/run-test.rb | 1 +
c_glib/test/test-int8-tensor.rb | 43 ++++
c_glib/test/test-tensor.rb | 100 ++++++++
c_glib/test/test-uint8-tensor.rb | 43 ++++
16 files changed, 1154 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/arrow/blob/0dc6fe8f/c_glib/arrow-glib/Makefile.am
----------------------------------------------------------------------
diff --git a/c_glib/arrow-glib/Makefile.am b/c_glib/arrow-glib/Makefile.am
index 2e7a9a0..fbfe3a4 100644
--- a/c_glib/arrow-glib/Makefile.am
+++ b/c_glib/arrow-glib/Makefile.am
@@ -65,6 +65,7 @@ libarrow_glib_la_headers = \
int8-array.h \
int8-array-builder.h \
int8-data-type.h \
+ int8-tensor.h \
int16-array.h \
int16-array-builder.h \
int16-data-type.h \
@@ -88,10 +89,12 @@ libarrow_glib_la_headers = \
struct-array-builder.h \
struct-data-type.h \
table.h \
+ tensor.h \
type.h \
uint8-array.h \
uint8-array-builder.h \
uint8-data-type.h \
+ uint8-tensor.h \
uint16-array.h \
uint16-array-builder.h \
uint16-data-type.h \
@@ -152,6 +155,7 @@ libarrow_glib_la_sources = \
int8-array.cpp \
int8-array-builder.cpp \
int8-data-type.cpp \
+ int8-tensor.cpp \
int16-array.cpp \
int16-array-builder.cpp \
int16-data-type.cpp \
@@ -175,10 +179,12 @@ libarrow_glib_la_sources = \
struct-array-builder.cpp \
struct-data-type.cpp \
table.cpp \
+ tensor.cpp \
type.cpp \
uint8-array.cpp \
uint8-array-builder.cpp \
uint8-data-type.cpp \
+ uint8-tensor.cpp \
uint16-array.cpp \
uint16-array-builder.cpp \
uint16-data-type.cpp \
@@ -220,9 +226,11 @@ libarrow_glib_la_cpp_headers = \
data-type.hpp \
error.hpp \
field.hpp \
+ numeric-tensor.hpp \
record-batch.hpp \
schema.hpp \
table.hpp \
+ tensor.hpp \
type.hpp
libarrow_glib_la_cpp_headers += \
http://git-wip-us.apache.org/repos/asf/arrow/blob/0dc6fe8f/c_glib/arrow-glib/arrow-glib.h
----------------------------------------------------------------------
diff --git a/c_glib/arrow-glib/arrow-glib.h b/c_glib/arrow-glib/arrow-glib.h
index b15c56f..eec9e25 100644
--- a/c_glib/arrow-glib/arrow-glib.h
+++ b/c_glib/arrow-glib/arrow-glib.h
@@ -42,6 +42,7 @@
#include <arrow-glib/int8-array.h>
#include <arrow-glib/int8-array-builder.h>
#include <arrow-glib/int8-data-type.h>
+#include <arrow-glib/int8-tensor.h>
#include <arrow-glib/int16-array.h>
#include <arrow-glib/int16-array-builder.h>
#include <arrow-glib/int16-data-type.h>
@@ -65,10 +66,12 @@
#include <arrow-glib/struct-array-builder.h>
#include <arrow-glib/struct-data-type.h>
#include <arrow-glib/table.h>
+#include <arrow-glib/tensor.h>
#include <arrow-glib/type.h>
#include <arrow-glib/uint8-array.h>
#include <arrow-glib/uint8-array-builder.h>
#include <arrow-glib/uint8-data-type.h>
+#include <arrow-glib/uint8-tensor.h>
#include <arrow-glib/uint16-array.h>
#include <arrow-glib/uint16-array-builder.h>
#include <arrow-glib/uint16-data-type.h>
http://git-wip-us.apache.org/repos/asf/arrow/blob/0dc6fe8f/c_glib/arrow-glib/arrow-glib.hpp
----------------------------------------------------------------------
diff --git a/c_glib/arrow-glib/arrow-glib.hpp b/c_glib/arrow-glib/arrow-glib.hpp
index 3404d4d..d6ef370 100644
--- a/c_glib/arrow-glib/arrow-glib.hpp
+++ b/c_glib/arrow-glib/arrow-glib.hpp
@@ -31,9 +31,11 @@
#include <arrow-glib/error.hpp>
#include <arrow-glib/field.hpp>
#include <arrow-glib/float-array.hpp>
+#include <arrow-glib/numeric-tensor.hpp>
#include <arrow-glib/record-batch.h>
#include <arrow-glib/schema.hpp>
#include <arrow-glib/table.hpp>
+#include <arrow-glib/tensor.hpp>
#include <arrow-glib/type.hpp>
#include <arrow-glib/file.hpp>
http://git-wip-us.apache.org/repos/asf/arrow/blob/0dc6fe8f/c_glib/arrow-glib/int8-tensor.cpp
----------------------------------------------------------------------
diff --git a/c_glib/arrow-glib/int8-tensor.cpp b/c_glib/arrow-glib/int8-tensor.cpp
new file mode 100644
index 0000000..06521a0
--- /dev/null
+++ b/c_glib/arrow-glib/int8-tensor.cpp
@@ -0,0 +1,105 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <arrow-glib/buffer.hpp>
+#include <arrow-glib/int8-tensor.h>
+#include <arrow-glib/numeric-tensor.hpp>
+
+G_BEGIN_DECLS
+
+/**
+ * SECTION: int8-tensor
+ * @short_description: 8-bit integer tensor class
+ *
+ * #GArrowInt8Tensor is a class for 8-bit integer tensor. It can store
+ * zero or more 8-bit integer data.
+ */
+
+G_DEFINE_TYPE(GArrowInt8Tensor, \
+ garrow_int8_tensor, \
+ GARROW_TYPE_TENSOR)
+
+static void
+garrow_int8_tensor_init(GArrowInt8Tensor *object)
+{
+}
+
+static void
+garrow_int8_tensor_class_init(GArrowInt8TensorClass *klass)
+{
+}
+
+/**
+ * garrow_int8_tensor_new:
+ * @data: A #GArrowBuffer that contains tensor data.
+ * @shape: (array length=n_dimensions): A list of dimension sizes.
+ * @n_dimensions: The number of dimensions.
+ * @strides: (array length=n_strides) (nullable): A list of the number of
+ * bytes in each dimension.
+ * @n_strides: The number of strides.
+ * @dimention_names: (array length=n_dimention_names) (nullable): A list of
+ * dimension names.
+ * @n_dimention_names: The number of dimension names
+ *
+ * Returns: The newly created #GArrowInt8Tensor.
+ *
+ * Since: 0.3.0
+ */
+GArrowInt8Tensor *
+garrow_int8_tensor_new(GArrowBuffer *data,
+ gint64 *shape,
+ gsize n_dimensions,
+ gint64 *strides,
+ gsize n_strides,
+ gchar **dimension_names,
+ gsize n_dimension_names)
+{
+ auto tensor =
+ garrow::numeric_tensor_new<arrow::Int8Tensor>(data,
+ shape,
+ n_dimensions,
+ strides,
+ n_strides,
+ dimension_names,
+ n_dimension_names);
+ return GARROW_INT8_TENSOR(tensor);
+}
+
+/**
+ * garrow_int8_tensor_get_raw_data:
+ * @tensor: A #GArrowInt8Tensor.
+ * @n_data: (out): The number of data.
+ *
+ * Returns: (array length=n_data): The raw data in the tensor.
+ *
+ * Since: 0.3.0
+ */
+const gint8 *
+garrow_int8_tensor_get_raw_data(GArrowInt8Tensor *tensor,
+ gint64 *n_data)
+{
+ return garrow::numeric_tensor_get_raw_data<arrow::Int8Tensor, int8_t>(GARROW_TENSOR(tensor),
+ n_data);
+}
+
+G_END_DECLS
http://git-wip-us.apache.org/repos/asf/arrow/blob/0dc6fe8f/c_glib/arrow-glib/int8-tensor.h
----------------------------------------------------------------------
diff --git a/c_glib/arrow-glib/int8-tensor.h b/c_glib/arrow-glib/int8-tensor.h
new file mode 100644
index 0000000..76ed3c8
--- /dev/null
+++ b/c_glib/arrow-glib/int8-tensor.h
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#pragma once
+
+#include <arrow-glib/tensor.h>
+
+G_BEGIN_DECLS
+
+#define GARROW_TYPE_INT8_TENSOR \
+ (garrow_int8_tensor_get_type())
+#define GARROW_INT8_TENSOR(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), \
+ GARROW_TYPE_INT8_TENSOR, \
+ GArrowInt8Tensor))
+#define GARROW_INT8_TENSOR_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass), \
+ GARROW_TYPE_INT8_TENSOR, \
+ GArrowInt8TensorClass))
+#define GARROW_IS_INT8_TENSOR(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
+ GARROW_TYPE_INT8_TENSOR))
+#define GARROW_IS_INT8_TENSOR_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), \
+ GARROW_TYPE_INT8_TENSOR))
+#define GARROW_INT8_TENSOR_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS((obj), \
+ GARROW_TYPE_INT8_TENSOR, \
+ GArrowInt8TensorClass))
+
+typedef struct _GArrowInt8Tensor GArrowInt8Tensor;
+typedef struct _GArrowInt8TensorClass GArrowInt8TensorClass;
+
+/**
+ * GArrowInt8Tensor:
+ *
+ * It wraps `arrow::Int8Tensor`.
+ */
+struct _GArrowInt8Tensor
+{
+ /*< private >*/
+ GArrowTensor parent_instance;
+};
+
+struct _GArrowInt8TensorClass
+{
+ GArrowTensorClass parent_class;
+};
+
+GType garrow_int8_tensor_get_type(void) G_GNUC_CONST;
+
+GArrowInt8Tensor *garrow_int8_tensor_new(GArrowBuffer *data,
+ gint64 *shape,
+ gsize n_dimensions,
+ gint64 *strides,
+ gsize n_strides,
+ gchar **dimention_names,
+ gsize n_dimention_names);
+
+const gint8 *garrow_int8_tensor_get_raw_data(GArrowInt8Tensor *tensor,
+ gint64 *n_data);
+
+G_END_DECLS
http://git-wip-us.apache.org/repos/asf/arrow/blob/0dc6fe8f/c_glib/arrow-glib/numeric-tensor.hpp
----------------------------------------------------------------------
diff --git a/c_glib/arrow-glib/numeric-tensor.hpp b/c_glib/arrow-glib/numeric-tensor.hpp
new file mode 100644
index 0000000..07cea62
--- /dev/null
+++ b/c_glib/arrow-glib/numeric-tensor.hpp
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#pragma once
+
+#include <arrow-glib/tensor.hpp>
+
+namespace garrow {
+ template <typename T>
+ GArrowTensor *numeric_tensor_new(GArrowBuffer *data,
+ gint64 *shape,
+ gsize n_dimensions,
+ gint64 *strides,
+ gsize n_strides,
+ gchar **dimention_names,
+ gsize n_dimention_names) {
+ auto arrow_data = garrow_buffer_get_raw(data);
+ std::vector<int64_t> arrow_shape;
+ for (gsize i = 0; i < n_dimensions; ++i) {
+ arrow_shape.push_back(shape[i]);
+ }
+ std::vector<int64_t> arrow_strides;
+ for (gsize i = 0; i < n_strides; ++i) {
+ arrow_strides.push_back(strides[i]);
+ }
+ std::vector<std::string> arrow_dimention_names;
+ for (gsize i = 0; i < n_dimention_names; ++i) {
+ arrow_dimention_names.push_back(dimention_names[i]);
+ }
+ auto arrow_numeric_tensor =
+ std::make_shared<T>(arrow_data,
+ arrow_shape,
+ arrow_strides,
+ arrow_dimention_names);
+ std::shared_ptr<arrow::Tensor> arrow_tensor = arrow_numeric_tensor;
+ auto tensor = garrow_tensor_new_raw(&arrow_tensor);
+ return tensor;
+ }
+
+ template <typename T, typename value_type>
+ const value_type *numeric_tensor_get_raw_data(GArrowTensor *tensor,
+ gint64 *n_data) {
+ auto arrow_tensor = garrow_tensor_get_raw(tensor);
+ auto arrow_numeric_tensor = static_cast<const T *>(arrow_tensor.get());
+ *n_data = arrow_numeric_tensor->size();
+ return arrow_numeric_tensor->raw_data();
+ }
+}
http://git-wip-us.apache.org/repos/asf/arrow/blob/0dc6fe8f/c_glib/arrow-glib/tensor.cpp
----------------------------------------------------------------------
diff --git a/c_glib/arrow-glib/tensor.cpp b/c_glib/arrow-glib/tensor.cpp
new file mode 100644
index 0000000..cbc9d8e
--- /dev/null
+++ b/c_glib/arrow-glib/tensor.cpp
@@ -0,0 +1,390 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <arrow-glib/buffer.hpp>
+#include <arrow-glib/data-type.hpp>
+#include <arrow-glib/int8-tensor.h>
+#include <arrow-glib/tensor.hpp>
+#include <arrow-glib/type.hpp>
+#include <arrow-glib/uint8-tensor.h>
+
+G_BEGIN_DECLS
+
+/**
+ * SECTION: tensor
+ * @short_description: Base class for all tensor classes
+ *
+ * #GArrowTensor is a base class for all tensor classes such as
+ * #GArrowInt8Tensor.
+ * #GArrowBooleanTensorBuilder to create a new tensor.
+ *
+ * Since: 0.3.0
+ */
+
+typedef struct GArrowTensorPrivate_ {
+ std::shared_ptr<arrow::Tensor> tensor;
+} GArrowTensorPrivate;
+
+enum {
+ PROP_0,
+ PROP_TENSOR
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE(GArrowTensor, garrow_tensor, G_TYPE_OBJECT)
+
+#define GARROW_TENSOR_GET_PRIVATE(obj) \
+ (G_TYPE_INSTANCE_GET_PRIVATE((obj), GARROW_TYPE_TENSOR, GArrowTensorPrivate))
+
+static void
+garrow_tensor_finalize(GObject *object)
+{
+ auto priv = GARROW_TENSOR_GET_PRIVATE(object);
+
+ priv->tensor = nullptr;
+
+ G_OBJECT_CLASS(garrow_tensor_parent_class)->finalize(object);
+}
+
+static void
+garrow_tensor_set_property(GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ auto priv = GARROW_TENSOR_GET_PRIVATE(object);
+
+ switch (prop_id) {
+ case PROP_TENSOR:
+ priv->tensor =
+ *static_cast<std::shared_ptr<arrow::Tensor> *>(g_value_get_pointer(value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+garrow_tensor_get_property(GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ switch (prop_id) {
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+garrow_tensor_init(GArrowTensor *object)
+{
+}
+
+static void
+garrow_tensor_class_init(GArrowTensorClass *klass)
+{
+ GParamSpec *spec;
+
+ auto gobject_class = G_OBJECT_CLASS(klass);
+
+ gobject_class->finalize = garrow_tensor_finalize;
+ gobject_class->set_property = garrow_tensor_set_property;
+ gobject_class->get_property = garrow_tensor_get_property;
+
+ spec = g_param_spec_pointer("tensor",
+ "Tensor",
+ "The raw std::shared<arrow::Tensor> *",
+ static_cast<GParamFlags>(G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property(gobject_class, PROP_TENSOR, spec);
+}
+
+/**
+ * garrow_tensor_get_value_data_type:
+ * @tensor: A #GArrowTensor.
+ *
+ * Returns: (transfer full): The data type of each value in the tensor.
+ *
+ * Since: 0.3.0
+ */
+GArrowDataType *
+garrow_tensor_get_value_data_type(GArrowTensor *tensor)
+{
+ auto arrow_tensor = garrow_tensor_get_raw(tensor);
+ auto arrow_data_type = arrow_tensor->type();
+ return garrow_data_type_new_raw(&arrow_data_type);
+}
+
+/**
+ * garrow_tensor_get_value_type:
+ * @tensor: A #GArrowTensor.
+ *
+ * Returns: The type of each value in the tensor.
+ *
+ * Since: 0.3.0
+ */
+GArrowType
+garrow_tensor_get_value_type(GArrowTensor *tensor)
+{
+ auto arrow_tensor = garrow_tensor_get_raw(tensor);
+ auto arrow_type = arrow_tensor->type_id();
+ return garrow_type_from_raw(arrow_type);
+}
+
+/**
+ * garrow_tensor_get_buffer:
+ * @tensor: A #GArrowTensor.
+ *
+ * Returns: (transfer full): The data of the tensor.
+ *
+ * Since: 0.3.0
+ */
+GArrowBuffer *
+garrow_tensor_get_buffer(GArrowTensor *tensor)
+{
+ auto arrow_tensor = garrow_tensor_get_raw(tensor);
+ auto arrow_buffer = arrow_tensor->data();
+ return garrow_buffer_new_raw(&arrow_buffer);
+}
+
+/**
+ * garrow_tensor_get_shape:
+ * @tensor: A #GArrowTensor.
+ * @n_dimensions: (out): The number of dimensions.
+ *
+ * Returns: (array length=n_dimensions): The shape of the tensor.
+ * It should be freed with g_free() when no longer needed.
+ *
+ * Since: 0.3.0
+ */
+gint64 *
+garrow_tensor_get_shape(GArrowTensor *tensor, gint *n_dimensions)
+{
+ auto arrow_tensor = garrow_tensor_get_raw(tensor);
+ auto arrow_shape = arrow_tensor->shape();
+ auto n_dimensions_raw = arrow_shape.size();
+ auto shape =
+ static_cast<gint64 *>(g_malloc_n(sizeof(gint64), n_dimensions_raw));
+ for (gsize i = 0; i < n_dimensions_raw; ++i) {
+ shape[i] = arrow_shape[i];
+ }
+ *n_dimensions = static_cast<gint>(n_dimensions_raw);
+ return shape;
+}
+
+/**
+ * garrow_tensor_get_strides:
+ * @tensor: A #GArrowTensor.
+ * @n_strides: (out): The number of strides.
+ *
+ * Returns: (array length=n_strides): The strides of the tensor.
+ * It should be freed with g_free() when no longer needed.
+ *
+ * Since: 0.3.0
+ */
+gint64 *
+garrow_tensor_get_strides(GArrowTensor *tensor, gint *n_strides)
+{
+ auto arrow_tensor = garrow_tensor_get_raw(tensor);
+ auto arrow_strides = arrow_tensor->strides();
+ auto n_strides_raw = arrow_strides.size();
+ auto strides =
+ static_cast<gint64 *>(g_malloc_n(sizeof(gint64), n_strides_raw));
+ for (gsize i = 0; i < n_strides_raw; ++i) {
+ strides[i] = arrow_strides[i];
+ }
+ *n_strides = static_cast<gint>(n_strides_raw);
+ return strides;
+}
+
+/**
+ * garrow_tensor_get_n_dimensions:
+ * @tensor: A #GArrowTensor.
+ *
+ * Returns: The number of dimensions of the tensor.
+ *
+ * Since: 0.3.0
+ */
+gint
+garrow_tensor_get_n_dimensions(GArrowTensor *tensor)
+{
+ auto arrow_tensor = garrow_tensor_get_raw(tensor);
+ return arrow_tensor->ndim();
+}
+
+/**
+ * garrow_tensor_get_dimension_name:
+ * @tensor: A #GArrowTensor.
+ * @i: The index of the target dimension.
+ *
+ * Returns: The i-th dimension name of the tensor.
+ *
+ * Since: 0.3.0
+ */
+const gchar *
+garrow_tensor_get_dimension_name(GArrowTensor *tensor, gint i)
+{
+ auto arrow_tensor = garrow_tensor_get_raw(tensor);
+ auto arrow_dimension_name = arrow_tensor->dim_name(i);
+ return arrow_dimension_name.c_str();
+}
+
+/**
+ * garrow_tensor_get_size:
+ * @tensor: A #GArrowTensor.
+ *
+ * Returns: The number of value cells in the tensor.
+ *
+ * Since: 0.3.0
+ */
+gint64
+garrow_tensor_get_size(GArrowTensor *tensor)
+{
+ auto arrow_tensor = garrow_tensor_get_raw(tensor);
+ return arrow_tensor->size();
+}
+
+/**
+ * garrow_tensor_is_mutable:
+ * @tensor: A #GArrowTensor.
+ *
+ * Returns: %TRUE if the tensor is mutable, %FALSE otherwise.
+ *
+ * Since: 0.3.0
+ */
+gboolean
+garrow_tensor_is_mutable(GArrowTensor *tensor)
+{
+ auto arrow_tensor = garrow_tensor_get_raw(tensor);
+ return arrow_tensor->is_mutable();
+}
+
+/**
+ * garrow_tensor_is_contiguous:
+ * @tensor: A #GArrowTensor.
+ *
+ * Returns: %TRUE if the tensor is contiguous, %FALSE otherwise.
+ *
+ * Since: 0.3.0
+ */
+gboolean
+garrow_tensor_is_contiguous(GArrowTensor *tensor)
+{
+ auto arrow_tensor = garrow_tensor_get_raw(tensor);
+ return arrow_tensor->is_contiguous();
+}
+
+/**
+ * garrow_tensor_is_row_major:
+ * @tensor: A #GArrowTensor.
+ *
+ * Returns: %TRUE if the tensor is row major a.k.a. C order,
+ * %FALSE otherwise.
+ *
+ * Since: 0.3.0
+ */
+gboolean
+garrow_tensor_is_row_major(GArrowTensor *tensor)
+{
+ auto arrow_tensor = garrow_tensor_get_raw(tensor);
+ return arrow_tensor->is_row_major();
+}
+
+/**
+ * garrow_tensor_is_column_major:
+ * @tensor: A #GArrowTensor.
+ *
+ * Returns: %TRUE if the tensor is column major a.k.a. Fortran order,
+ * %FALSE otherwise.
+ *
+ * Since: 0.3.0
+ */
+gboolean
+garrow_tensor_is_column_major(GArrowTensor *tensor)
+{
+ auto arrow_tensor = garrow_tensor_get_raw(tensor);
+ return arrow_tensor->is_column_major();
+}
+
+G_END_DECLS
+
+GArrowTensor *
+garrow_tensor_new_raw(std::shared_ptr<arrow::Tensor> *arrow_tensor)
+{
+ GType type;
+ GArrowTensor *tensor;
+
+ switch ((*arrow_tensor)->type_id()) {
+ case arrow::Type::type::UINT8:
+ type = GARROW_TYPE_UINT8_TENSOR;
+ break;
+ case arrow::Type::type::INT8:
+ type = GARROW_TYPE_INT8_TENSOR;
+ break;
+/*
+ case arrow::Type::type::UINT16:
+ type = GARROW_TYPE_UINT16_TENSOR;
+ break;
+ case arrow::Type::type::INT16:
+ type = GARROW_TYPE_INT16_TENSOR;
+ break;
+ case arrow::Type::type::UINT32:
+ type = GARROW_TYPE_UINT32_TENSOR;
+ break;
+ case arrow::Type::type::INT32:
+ type = GARROW_TYPE_INT32_TENSOR;
+ break;
+ case arrow::Type::type::UINT64:
+ type = GARROW_TYPE_UINT64_TENSOR;
+ break;
+ case arrow::Type::type::INT64:
+ type = GARROW_TYPE_INT64_TENSOR;
+ break;
+ case arrow::Type::type::HALF_FLOAT:
+ type = GARROW_TYPE_HALF_FLOAT_TENSOR;
+ break;
+ case arrow::Type::type::FLOAT:
+ type = GARROW_TYPE_FLOAT_TENSOR;
+ break;
+ case arrow::Type::type::DOUBLE:
+ type = GARROW_TYPE_DOUBLE_TENSOR;
+ break;
+*/
+ default:
+ type = GARROW_TYPE_TENSOR;
+ break;
+ }
+ tensor = GARROW_TENSOR(g_object_new(type,
+ "tensor", arrow_tensor,
+ NULL));
+ return tensor;
+}
+
+std::shared_ptr<arrow::Tensor>
+garrow_tensor_get_raw(GArrowTensor *tensor)
+{
+ auto priv = GARROW_TENSOR_GET_PRIVATE(tensor);
+ return priv->tensor;
+}
http://git-wip-us.apache.org/repos/asf/arrow/blob/0dc6fe8f/c_glib/arrow-glib/tensor.h
----------------------------------------------------------------------
diff --git a/c_glib/arrow-glib/tensor.h b/c_glib/arrow-glib/tensor.h
new file mode 100644
index 0000000..bedc803
--- /dev/null
+++ b/c_glib/arrow-glib/tensor.h
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#pragma once
+
+#include <arrow-glib/buffer.h>
+#include <arrow-glib/data-type.h>
+
+G_BEGIN_DECLS
+
+#define GARROW_TYPE_TENSOR \
+ (garrow_tensor_get_type())
+#define GARROW_TENSOR(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), GARROW_TYPE_TENSOR, GArrowTensor))
+#define GARROW_TENSOR_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass), GARROW_TYPE_TENSOR, GArrowTensorClass))
+#define GARROW_IS_TENSOR(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj), GARROW_TYPE_TENSOR))
+#define GARROW_IS_TENSOR_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), GARROW_TYPE_TENSOR))
+#define GARROW_TENSOR_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS((obj), GARROW_TYPE_TENSOR, GArrowTensorClass))
+
+typedef struct _GArrowTensor GArrowTensor;
+typedef struct _GArrowTensorClass GArrowTensorClass;
+
+/**
+ * GArrowTensor:
+ *
+ * It wraps `arrow::Tensor`.
+ */
+struct _GArrowTensor
+{
+ /*< private >*/
+ GObject parent_instance;
+};
+
+struct _GArrowTensorClass
+{
+ GObjectClass parent_class;
+};
+
+GType garrow_tensor_get_type (void) G_GNUC_CONST;
+
+GArrowDataType *garrow_tensor_get_value_data_type(GArrowTensor *tensor);
+GArrowType garrow_tensor_get_value_type (GArrowTensor *tensor);
+GArrowBuffer *garrow_tensor_get_buffer (GArrowTensor *tensor);
+gint64 *garrow_tensor_get_shape (GArrowTensor *tensor,
+ gint *n_dimensions);
+gint64 *garrow_tensor_get_strides (GArrowTensor *tensor,
+ gint *n_strides);
+gint garrow_tensor_get_n_dimensions (GArrowTensor *tensor);
+const gchar *garrow_tensor_get_dimension_name (GArrowTensor *tensor,
+ gint i);
+gint64 garrow_tensor_get_size (GArrowTensor *tensor);
+gboolean garrow_tensor_is_mutable (GArrowTensor *tensor);
+gboolean garrow_tensor_is_contiguous (GArrowTensor *tensor);
+gboolean garrow_tensor_is_row_major (GArrowTensor *tensor);
+gboolean garrow_tensor_is_column_major (GArrowTensor *tensor);
+
+G_END_DECLS
http://git-wip-us.apache.org/repos/asf/arrow/blob/0dc6fe8f/c_glib/arrow-glib/tensor.hpp
----------------------------------------------------------------------
diff --git a/c_glib/arrow-glib/tensor.hpp b/c_glib/arrow-glib/tensor.hpp
new file mode 100644
index 0000000..392aeee
--- /dev/null
+++ b/c_glib/arrow-glib/tensor.hpp
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#pragma once
+
+#include <arrow/api.h>
+
+#include <arrow-glib/tensor.h>
+
+GArrowTensor *garrow_tensor_new_raw(std::shared_ptr<arrow::Tensor> *arrow_tensor);
+std::shared_ptr<arrow::Tensor> garrow_tensor_get_raw(GArrowTensor *tensor);
http://git-wip-us.apache.org/repos/asf/arrow/blob/0dc6fe8f/c_glib/arrow-glib/uint8-tensor.cpp
----------------------------------------------------------------------
diff --git a/c_glib/arrow-glib/uint8-tensor.cpp b/c_glib/arrow-glib/uint8-tensor.cpp
new file mode 100644
index 0000000..69f0f69
--- /dev/null
+++ b/c_glib/arrow-glib/uint8-tensor.cpp
@@ -0,0 +1,105 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <arrow-glib/buffer.hpp>
+#include <arrow-glib/uint8-tensor.h>
+#include <arrow-glib/numeric-tensor.hpp>
+
+G_BEGIN_DECLS
+
+/**
+ * SECTION: uint8-tensor
+ * @short_description: 8-bit unsigned integer tensor class
+ *
+ * #GArrowUint8Tensor is a class for 8-bit unsigned integer tensor. It
+ * can store zero or more 8-bit integer data.
+ */
+
+G_DEFINE_TYPE(GArrowUInt8Tensor, \
+ garrow_uint8_tensor, \
+ GARROW_TYPE_TENSOR)
+
+static void
+garrow_uint8_tensor_init(GArrowUInt8Tensor *object)
+{
+}
+
+static void
+garrow_uint8_tensor_class_init(GArrowUInt8TensorClass *klass)
+{
+}
+
+/**
+ * garrow_uint8_tensor_new:
+ * @data: A #GArrowBuffer that contains tensor data.
+ * @shape: (array length=n_dimensions): A list of dimension sizes.
+ * @n_dimensions: The number of dimensions.
+ * @strides: (array length=n_strides) (nullable): A list of the number of
+ * bytes in each dimension.
+ * @n_strides: The number of strides.
+ * @dimention_names: (array length=n_dimention_names) (nullable): A list of
+ * dimension names.
+ * @n_dimention_names: The number of dimension names
+ *
+ * Returns: The newly created #GArrowUInt8Tensor.
+ *
+ * Since: 0.3.0
+ */
+GArrowUInt8Tensor *
+garrow_uint8_tensor_new(GArrowBuffer *data,
+ gint64 *shape,
+ gsize n_dimensions,
+ gint64 *strides,
+ gsize n_strides,
+ gchar **dimension_names,
+ gsize n_dimension_names)
+{
+ auto tensor =
+ garrow::numeric_tensor_new<arrow::UInt8Tensor>(data,
+ shape,
+ n_dimensions,
+ strides,
+ n_strides,
+ dimension_names,
+ n_dimension_names);
+ return GARROW_UINT8_TENSOR(tensor);
+}
+
+/**
+ * garrow_uint8_tensor_get_raw_data:
+ * @tensor: A #GArrowUInt8Tensor.
+ * @n_data: (out): The number of data.
+ *
+ * Returns: (array length=n_data): The raw data in the tensor.
+ *
+ * Since: 0.3.0
+ */
+const guint8 *
+garrow_uint8_tensor_get_raw_data(GArrowUInt8Tensor *tensor,
+ gint64 *n_data)
+{
+ return garrow::numeric_tensor_get_raw_data<arrow::UInt8Tensor, uint8_t>(GARROW_TENSOR(tensor),
+ n_data);
+}
+
+G_END_DECLS
http://git-wip-us.apache.org/repos/asf/arrow/blob/0dc6fe8f/c_glib/arrow-glib/uint8-tensor.h
----------------------------------------------------------------------
diff --git a/c_glib/arrow-glib/uint8-tensor.h b/c_glib/arrow-glib/uint8-tensor.h
new file mode 100644
index 0000000..248c507
--- /dev/null
+++ b/c_glib/arrow-glib/uint8-tensor.h
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#pragma once
+
+#include <arrow-glib/tensor.h>
+
+G_BEGIN_DECLS
+
+#define GARROW_TYPE_UINT8_TENSOR \
+ (garrow_uint8_tensor_get_type())
+#define GARROW_UINT8_TENSOR(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), \
+ GARROW_TYPE_UINT8_TENSOR, \
+ GArrowUInt8Tensor))
+#define GARROW_UINT8_TENSOR_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass), \
+ GARROW_TYPE_UINT8_TENSOR, \
+ GArrowUInt8TensorClass))
+#define GARROW_IS_UINT8_TENSOR(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
+ GARROW_TYPE_UINT8_TENSOR))
+#define GARROW_IS_UINT8_TENSOR_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), \
+ GARROW_TYPE_UINT8_TENSOR))
+#define GARROW_UINT8_TENSOR_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS((obj), \
+ GARROW_TYPE_UINT8_TENSOR, \
+ GArrowUInt8TensorClass))
+
+typedef struct _GArrowUInt8Tensor GArrowUInt8Tensor;
+typedef struct _GArrowUInt8TensorClass GArrowUInt8TensorClass;
+
+/**
+ * GArrowUInt8Tensor:
+ *
+ * It wraps `arrow::UInt8Tensor`.
+ */
+struct _GArrowUInt8Tensor
+{
+ /*< private >*/
+ GArrowTensor parent_instance;
+};
+
+struct _GArrowUInt8TensorClass
+{
+ GArrowTensorClass parent_class;
+};
+
+GType garrow_uint8_tensor_get_type(void) G_GNUC_CONST;
+
+GArrowUInt8Tensor *garrow_uint8_tensor_new(GArrowBuffer *data,
+ gint64 *shape,
+ gsize n_dimensions,
+ gint64 *strides,
+ gsize n_strides,
+ gchar **dimention_names,
+ gsize n_dimention_names);
+
+const guint8 *garrow_uint8_tensor_get_raw_data(GArrowUInt8Tensor *tensor,
+ gint64 *n_data);
+
+G_END_DECLS
http://git-wip-us.apache.org/repos/asf/arrow/blob/0dc6fe8f/c_glib/test/helper/omittable.rb
----------------------------------------------------------------------
diff --git a/c_glib/test/helper/omittable.rb b/c_glib/test/helper/omittable.rb
new file mode 100644
index 0000000..a16ad32
--- /dev/null
+++ b/c_glib/test/helper/omittable.rb
@@ -0,0 +1,28 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+module Helper
+ module Omittable
+ def require_gi(major, minor, micro)
+ return if GLib.check_binding_version?(major, minor, micro)
+ message =
+ "Require gobject-introspection #{major}.#{minor}.#{micro} or later: " +
+ GLib::BINDING_VERSION.join(".")
+ omit(message)
+ end
+ end
+end
http://git-wip-us.apache.org/repos/asf/arrow/blob/0dc6fe8f/c_glib/test/run-test.rb
----------------------------------------------------------------------
diff --git a/c_glib/test/run-test.rb b/c_glib/test/run-test.rb
index 53805ca..50f548f 100755
--- a/c_glib/test/run-test.rb
+++ b/c_glib/test/run-test.rb
@@ -35,5 +35,6 @@ Arrow = GI.load("Arrow")
require "tempfile"
require_relative "helper/buildable"
+require_relative "helper/omittable"
exit(Test::Unit::AutoRunner.run(true, test_dir.to_s))
http://git-wip-us.apache.org/repos/asf/arrow/blob/0dc6fe8f/c_glib/test/test-int8-tensor.rb
----------------------------------------------------------------------
diff --git a/c_glib/test/test-int8-tensor.rb b/c_glib/test/test-int8-tensor.rb
new file mode 100644
index 0000000..a96a407
--- /dev/null
+++ b/c_glib/test/test-int8-tensor.rb
@@ -0,0 +1,43 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+class TestInt8Tensor < Test::Unit::TestCase
+ include Helper::Omittable
+
+ def setup
+ @raw_data = [
+ 1, 2,
+ 3, 4,
+
+ 5, 6,
+ 7, 8,
+
+ 9, 10,
+ 11, 12,
+ ]
+ data = Arrow::Buffer.new(@raw_data.pack("c*"))
+ shape = [3, 2, 2]
+ strides = []
+ names = []
+ @tensor = Arrow::Int8Tensor.new(data, shape, strides, names)
+ end
+
+ def test_raw_data
+ require_gi(3, 1, 2)
+ assert_equal(@raw_data, @tensor.raw_data)
+ end
+end
http://git-wip-us.apache.org/repos/asf/arrow/blob/0dc6fe8f/c_glib/test/test-tensor.rb
----------------------------------------------------------------------
diff --git a/c_glib/test/test-tensor.rb b/c_glib/test/test-tensor.rb
new file mode 100644
index 0000000..455b0d9
--- /dev/null
+++ b/c_glib/test/test-tensor.rb
@@ -0,0 +1,100 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+class TestTensor < Test::Unit::TestCase
+ include Helper::Omittable
+
+ def setup
+ @raw_data = [
+ 1, 2,
+ 3, 4,
+
+ 5, 6,
+ 7, 8,
+
+ 9, 10,
+ 11, 12,
+ ]
+ data = Arrow::Buffer.new(@raw_data.pack("c*"))
+ @shape = [3, 2, 2]
+ strides = []
+ names = ["a", "b", "c"]
+ @tensor = Arrow::Int8Tensor.new(data, @shape, strides, names)
+ end
+
+ def test_value_data_type
+ assert_equal(Arrow::Int8DataType, @tensor.value_data_type.class)
+ end
+
+ def test_value_type
+ assert_equal(Arrow::Type::INT8, @tensor.value_type)
+ end
+
+ def test_buffer
+ assert_equal(@raw_data, @tensor.buffer.data)
+ end
+
+ def test_shape
+ require_gi(3, 1, 2)
+ assert_equal(@shape, @tensor.shape)
+ end
+
+ def test_strides
+ require_gi(3, 1, 2)
+ assert_equal([4, 2, 1], @tensor.strides)
+ end
+
+ def test_n_dimensions
+ assert_equal(@shape.size, @tensor.n_dimensions)
+ end
+
+ def test_dimension_name
+ dimension_names = @tensor.n_dimensions.times.collect do |i|
+ @tensor.get_dimension_name(i)
+ end
+ assert_equal(["a", "b", "c"],
+ dimension_names)
+ end
+
+ def test_size
+ assert_equal(@raw_data.size, @tensor.size)
+ end
+
+ def test_mutable?
+ assert do
+ not @tensor.mutable?
+ end
+ end
+
+ def test_contiguous?
+ assert do
+ @tensor.contiguous?
+ end
+ end
+
+ def test_row_major?
+ assert do
+ @tensor.row_major?
+ end
+ end
+
+ def test_column_major?
+ assert do
+ not @tensor.column_major?
+ end
+ end
+end
http://git-wip-us.apache.org/repos/asf/arrow/blob/0dc6fe8f/c_glib/test/test-uint8-tensor.rb
----------------------------------------------------------------------
diff --git a/c_glib/test/test-uint8-tensor.rb b/c_glib/test/test-uint8-tensor.rb
new file mode 100644
index 0000000..0fe758b
--- /dev/null
+++ b/c_glib/test/test-uint8-tensor.rb
@@ -0,0 +1,43 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+class TestUInt8Tensor < Test::Unit::TestCase
+ include Helper::Omittable
+
+ def setup
+ @raw_data = [
+ 1, 2,
+ 3, 4,
+
+ 5, 6,
+ 7, 8,
+
+ 9, 10,
+ 11, 12,
+ ]
+ data = Arrow::Buffer.new(@raw_data.pack("c*"))
+ shape = [3, 2, 2]
+ strides = []
+ names = []
+ @tensor = Arrow::UInt8Tensor.new(data, shape, strides, names)
+ end
+
+ def test_raw_data
+ require_gi(3, 1, 2)
+ assert_equal(@raw_data, @tensor.raw_data)
+ end
+end