From 11a00fe382aa150d4a52aaad4f4e6ccbab1699b6 Mon Sep 17 00:00:00 2001 From: Sarah Gilmore Date: Thu, 11 May 2023 14:32:16 -0400 Subject: [PATCH] Add unsigned integer array MATLAB classes. Co-authored-by: Kevin Gurney --- matlab/src/cpp/arrow/matlab/proxy/factory.cc | 6 +++ matlab/src/matlab/+arrow/+array/UInt16Array.m | 40 +++++++++++++++++++ matlab/src/matlab/+arrow/+array/UInt32Array.m | 40 +++++++++++++++++++ matlab/src/matlab/+arrow/+array/UInt64Array.m | 40 +++++++++++++++++++ matlab/src/matlab/+arrow/+array/UInt8Array.m | 40 +++++++++++++++++++ matlab/test/arrow/array/tUInt16Array.m | 27 +++++++++++++ matlab/test/arrow/array/tUInt32Array.m | 27 +++++++++++++ matlab/test/arrow/array/tUInt64Array.m | 27 +++++++++++++ matlab/test/arrow/array/tUInt8Array.m | 27 +++++++++++++ 9 files changed, 274 insertions(+) create mode 100644 matlab/src/matlab/+arrow/+array/UInt16Array.m create mode 100644 matlab/src/matlab/+arrow/+array/UInt32Array.m create mode 100644 matlab/src/matlab/+arrow/+array/UInt64Array.m create mode 100644 matlab/src/matlab/+arrow/+array/UInt8Array.m create mode 100644 matlab/test/arrow/array/tUInt16Array.m create mode 100644 matlab/test/arrow/array/tUInt32Array.m create mode 100644 matlab/test/arrow/array/tUInt64Array.m create mode 100644 matlab/test/arrow/array/tUInt8Array.m diff --git a/matlab/src/cpp/arrow/matlab/proxy/factory.cc b/matlab/src/cpp/arrow/matlab/proxy/factory.cc index fb00aaafd20..5b3b85d33ce 100644 --- a/matlab/src/cpp/arrow/matlab/proxy/factory.cc +++ b/matlab/src/cpp/arrow/matlab/proxy/factory.cc @@ -25,6 +25,12 @@ namespace arrow::matlab::proxy { std::shared_ptr Factory::make_proxy(const ClassName& class_name, const FunctionArguments& constructor_arguments) { + // Register MATLAB Proxy classes for unsigned integer arrays + REGISTER_PROXY(arrow.array.proxy.UInt8Array, arrow::matlab::array::proxy::NumericArray); + REGISTER_PROXY(arrow.array.proxy.UInt16Array, arrow::matlab::array::proxy::NumericArray); + REGISTER_PROXY(arrow.array.proxy.UInt32Array, arrow::matlab::array::proxy::NumericArray); + REGISTER_PROXY(arrow.array.proxy.UInt64Array, arrow::matlab::array::proxy::NumericArray); + // Register MATLAB Proxy classes with corresponding C++ Proxy classes. REGISTER_PROXY(arrow.array.proxy.Float32Array, arrow::matlab::array::proxy::NumericArray); REGISTER_PROXY(arrow.array.proxy.Float64Array, arrow::matlab::array::proxy::NumericArray); diff --git a/matlab/src/matlab/+arrow/+array/UInt16Array.m b/matlab/src/matlab/+arrow/+array/UInt16Array.m new file mode 100644 index 00000000000..4abcf332413 --- /dev/null +++ b/matlab/src/matlab/+arrow/+array/UInt16Array.m @@ -0,0 +1,40 @@ +classdef UInt16Array < arrow.array.Array + % arrow.array.UInt16Array + + % 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. + + properties (Hidden, SetAccess=private) + MatlabArray = uint16([]) + end + + methods + function obj = UInt16Array(data, opts) + arguments + data + opts.DeepCopy = false + end + validateattributes(data, "uint16", ["2d", "nonsparse", "real"]); + if ~isempty(data), validateattributes(data, "uint16", "vector"); end + obj@arrow.array.Array("Name", "arrow.array.proxy.UInt16Array", "ConstructorArguments", {data, opts.DeepCopy}); + % Store a reference to the array if not doing a deep copy + if (~opts.DeepCopy), obj.MatlabArray = data; end + end + + function data = uint16(obj) + data = obj.Proxy.toMATLAB(); + end + end +end \ No newline at end of file diff --git a/matlab/src/matlab/+arrow/+array/UInt32Array.m b/matlab/src/matlab/+arrow/+array/UInt32Array.m new file mode 100644 index 00000000000..6113c816d8b --- /dev/null +++ b/matlab/src/matlab/+arrow/+array/UInt32Array.m @@ -0,0 +1,40 @@ +classdef UInt32Array < arrow.array.Array + % arrow.array.UInt32Array + + % 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. + + properties (Hidden, SetAccess=private) + MatlabArray = uint32([]) + end + + methods + function obj = UInt32Array(data, opts) + arguments + data + opts.DeepCopy = false + end + validateattributes(data, "uint32", ["2d", "nonsparse", "real"]); + if ~isempty(data), validateattributes(data, "uint32", "vector"); end + obj@arrow.array.Array("Name", "arrow.array.proxy.UInt32Array", "ConstructorArguments", {data, opts.DeepCopy}); + % Store a reference to the array if not doing a deep copy + if (~opts.DeepCopy), obj.MatlabArray = data; end + end + + function data = uint32(obj) + data = obj.Proxy.toMATLAB(); + end + end +end \ No newline at end of file diff --git a/matlab/src/matlab/+arrow/+array/UInt64Array.m b/matlab/src/matlab/+arrow/+array/UInt64Array.m new file mode 100644 index 00000000000..dd5f2f12744 --- /dev/null +++ b/matlab/src/matlab/+arrow/+array/UInt64Array.m @@ -0,0 +1,40 @@ +classdef UInt64Array < arrow.array.Array + % arrow.array.UInt64Array + + % 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. + + properties (Hidden, SetAccess=private) + MatlabArray = uint64([]) + end + + methods + function obj = UInt64Array(data, opts) + arguments + data + opts.DeepCopy = false + end + validateattributes(data, "uint64", ["2d", "nonsparse", "real"]); + if ~isempty(data), validateattributes(data, "uint64", "vector"); end + obj@arrow.array.Array("Name", "arrow.array.proxy.UInt64Array", "ConstructorArguments", {data, opts.DeepCopy}); + % Store a reference to the array if not doing a deep copy + if (~opts.DeepCopy), obj.MatlabArray = data; end + end + + function data = uint64(obj) + data = obj.Proxy.toMATLAB(); + end + end +end \ No newline at end of file diff --git a/matlab/src/matlab/+arrow/+array/UInt8Array.m b/matlab/src/matlab/+arrow/+array/UInt8Array.m new file mode 100644 index 00000000000..400baee2447 --- /dev/null +++ b/matlab/src/matlab/+arrow/+array/UInt8Array.m @@ -0,0 +1,40 @@ +classdef UInt8Array < arrow.array.Array + % arrow.array.UInt8Array + + % 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. + + properties (Hidden, SetAccess=private) + MatlabArray = uint8([]) + end + + methods + function obj = UInt8Array(data, opts) + arguments + data + opts.DeepCopy = false + end + validateattributes(data, "uint8", ["2d", "nonsparse", "real"]); + if ~isempty(data), validateattributes(data, "uint8", "vector"); end + obj@arrow.array.Array("Name", "arrow.array.proxy.UInt8Array", "ConstructorArguments", {data, opts.DeepCopy}); + % Store a reference to the array if not doing a deep copy + if (~opts.DeepCopy), obj.MatlabArray = data; end + end + + function data = uint8(obj) + data = obj.Proxy.toMATLAB(); + end + end +end \ No newline at end of file diff --git a/matlab/test/arrow/array/tUInt16Array.m b/matlab/test/arrow/array/tUInt16Array.m new file mode 100644 index 00000000000..d5cbbc9a4a9 --- /dev/null +++ b/matlab/test/arrow/array/tUInt16Array.m @@ -0,0 +1,27 @@ +classdef tUInt16Array < hNumericArray + % Tests for arrow.array.UInt16Array + + % 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. + + properties + ArrowArrayClassName = "arrow.array.UInt16Array" + ArrowArrayConstructor = @arrow.array.UInt16Array + MatlabConversionFcn = @uint16 % uint16 method on class + MatlabArrayFcn = @uint16 % uint16 function + MaxValue = intmax("uint16") + MinValue = intmin("uint16") + end +end \ No newline at end of file diff --git a/matlab/test/arrow/array/tUInt32Array.m b/matlab/test/arrow/array/tUInt32Array.m new file mode 100644 index 00000000000..0223c1b6fc9 --- /dev/null +++ b/matlab/test/arrow/array/tUInt32Array.m @@ -0,0 +1,27 @@ +classdef tUInt32Array < hNumericArray + % Tests for arrow.array.UInt32Array + + % 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. + + properties + ArrowArrayClassName = "arrow.array.UInt32Array" + ArrowArrayConstructor = @arrow.array.UInt32Array + MatlabConversionFcn = @uint32 % uint32 method on class + MatlabArrayFcn = @uint32 % uint32 function + MaxValue = intmax("uint32") + MinValue = intmin("uint32") + end +end \ No newline at end of file diff --git a/matlab/test/arrow/array/tUInt64Array.m b/matlab/test/arrow/array/tUInt64Array.m new file mode 100644 index 00000000000..ba5adc66a6a --- /dev/null +++ b/matlab/test/arrow/array/tUInt64Array.m @@ -0,0 +1,27 @@ +classdef tUInt64Array < hNumericArray + % Tests for arrow.array.UInt64Array + + % 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. + + properties + ArrowArrayClassName = "arrow.array.UInt64Array" + ArrowArrayConstructor = @arrow.array.UInt64Array + MatlabConversionFcn = @uint64 % uint64 method on class + MatlabArrayFcn = @uint64 % uint64 function + MaxValue = intmax("uint64") + MinValue = intmin("uint64") + end +end \ No newline at end of file diff --git a/matlab/test/arrow/array/tUInt8Array.m b/matlab/test/arrow/array/tUInt8Array.m new file mode 100644 index 00000000000..9dd8c548f94 --- /dev/null +++ b/matlab/test/arrow/array/tUInt8Array.m @@ -0,0 +1,27 @@ +classdef tUInt8Array < hNumericArray + % Tests for arrow.array.UInt8Array + + % 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. + + properties + ArrowArrayClassName = "arrow.array.UInt8Array" + ArrowArrayConstructor = @arrow.array.UInt8Array + MatlabConversionFcn = @uint8 % uint8 method on class + MatlabArrayFcn = @uint8 % uint8 function + MaxValue = intmax("uint8") + MinValue = intmin("uint8") + end +end \ No newline at end of file