summaryrefslogtreecommitdiffstats
path: root/src/arrow/python/pyarrow/tests/test_misc.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/arrow/python/pyarrow/tests/test_misc.py')
-rw-r--r--src/arrow/python/pyarrow/tests/test_misc.py185
1 files changed, 185 insertions, 0 deletions
diff --git a/src/arrow/python/pyarrow/tests/test_misc.py b/src/arrow/python/pyarrow/tests/test_misc.py
new file mode 100644
index 000000000..012f15e16
--- /dev/null
+++ b/src/arrow/python/pyarrow/tests/test_misc.py
@@ -0,0 +1,185 @@
+# 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.
+
+import os
+import subprocess
+import sys
+
+import pytest
+
+import pyarrow as pa
+
+
+def test_get_include():
+ include_dir = pa.get_include()
+ assert os.path.exists(os.path.join(include_dir, 'arrow', 'api.h'))
+
+
+@pytest.mark.skipif('sys.platform != "win32"')
+def test_get_library_dirs_win32():
+ assert any(os.path.exists(os.path.join(directory, 'arrow.lib'))
+ for directory in pa.get_library_dirs())
+
+
+def test_cpu_count():
+ n = pa.cpu_count()
+ assert n > 0
+ try:
+ pa.set_cpu_count(n + 5)
+ assert pa.cpu_count() == n + 5
+ finally:
+ pa.set_cpu_count(n)
+
+
+def test_io_thread_count():
+ n = pa.io_thread_count()
+ assert n > 0
+ try:
+ pa.set_io_thread_count(n + 5)
+ assert pa.io_thread_count() == n + 5
+ finally:
+ pa.set_io_thread_count(n)
+
+
+def test_build_info():
+ assert isinstance(pa.cpp_build_info, pa.BuildInfo)
+ assert isinstance(pa.cpp_version_info, pa.VersionInfo)
+ assert isinstance(pa.cpp_version, str)
+ assert isinstance(pa.__version__, str)
+ assert pa.cpp_build_info.version_info == pa.cpp_version_info
+
+ # assert pa.version == pa.__version__ # XXX currently false
+
+
+def test_runtime_info():
+ info = pa.runtime_info()
+ assert isinstance(info, pa.RuntimeInfo)
+ possible_simd_levels = ('none', 'sse4_2', 'avx', 'avx2', 'avx512')
+ assert info.simd_level in possible_simd_levels
+ assert info.detected_simd_level in possible_simd_levels
+
+ if info.simd_level != 'none':
+ env = os.environ.copy()
+ env['ARROW_USER_SIMD_LEVEL'] = 'none'
+ code = f"""if 1:
+ import pyarrow as pa
+
+ info = pa.runtime_info()
+ assert info.simd_level == 'none', info.simd_level
+ assert info.detected_simd_level == {info.detected_simd_level!r},\
+ info.detected_simd_level
+ """
+ subprocess.check_call([sys.executable, "-c", code], env=env)
+
+
+@pytest.mark.parametrize('klass', [
+ pa.Field,
+ pa.Schema,
+ pa.ChunkedArray,
+ pa.RecordBatch,
+ pa.Table,
+ pa.Buffer,
+ pa.Array,
+ pa.Tensor,
+ pa.DataType,
+ pa.ListType,
+ pa.LargeListType,
+ pa.FixedSizeListType,
+ pa.UnionType,
+ pa.SparseUnionType,
+ pa.DenseUnionType,
+ pa.StructType,
+ pa.Time32Type,
+ pa.Time64Type,
+ pa.TimestampType,
+ pa.Decimal128Type,
+ pa.Decimal256Type,
+ pa.DictionaryType,
+ pa.FixedSizeBinaryType,
+ pa.NullArray,
+ pa.NumericArray,
+ pa.IntegerArray,
+ pa.FloatingPointArray,
+ pa.BooleanArray,
+ pa.Int8Array,
+ pa.Int16Array,
+ pa.Int32Array,
+ pa.Int64Array,
+ pa.UInt8Array,
+ pa.UInt16Array,
+ pa.UInt32Array,
+ pa.UInt64Array,
+ pa.ListArray,
+ pa.LargeListArray,
+ pa.MapArray,
+ pa.FixedSizeListArray,
+ pa.UnionArray,
+ pa.BinaryArray,
+ pa.StringArray,
+ pa.FixedSizeBinaryArray,
+ pa.DictionaryArray,
+ pa.Date32Array,
+ pa.Date64Array,
+ pa.TimestampArray,
+ pa.Time32Array,
+ pa.Time64Array,
+ pa.DurationArray,
+ pa.Decimal128Array,
+ pa.Decimal256Array,
+ pa.StructArray,
+ pa.Scalar,
+ pa.BooleanScalar,
+ pa.Int8Scalar,
+ pa.Int16Scalar,
+ pa.Int32Scalar,
+ pa.Int64Scalar,
+ pa.UInt8Scalar,
+ pa.UInt16Scalar,
+ pa.UInt32Scalar,
+ pa.UInt64Scalar,
+ pa.HalfFloatScalar,
+ pa.FloatScalar,
+ pa.DoubleScalar,
+ pa.Decimal128Scalar,
+ pa.Decimal256Scalar,
+ pa.Date32Scalar,
+ pa.Date64Scalar,
+ pa.Time32Scalar,
+ pa.Time64Scalar,
+ pa.TimestampScalar,
+ pa.DurationScalar,
+ pa.StringScalar,
+ pa.BinaryScalar,
+ pa.FixedSizeBinaryScalar,
+ pa.ListScalar,
+ pa.LargeListScalar,
+ pa.MapScalar,
+ pa.FixedSizeListScalar,
+ pa.UnionScalar,
+ pa.StructScalar,
+ pa.DictionaryScalar,
+ pa.ipc.Message,
+ pa.ipc.MessageReader,
+ pa.MemoryPool,
+ pa.LoggingMemoryPool,
+ pa.ProxyMemoryPool,
+])
+def test_extension_type_constructor_errors(klass):
+ # ARROW-2638: prevent calling extension class constructors directly
+ msg = "Do not call {cls}'s constructor directly, use .* instead."
+ with pytest.raises(TypeError, match=msg.format(cls=klass.__name__)):
+ klass()