# 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. # Tools for dealing with Arrow type metadata in Python from pyarrow.lib import (is_boolean_value, # noqa is_integer_value, is_float_value) import pyarrow.lib as lib _SIGNED_INTEGER_TYPES = {lib.Type_INT8, lib.Type_INT16, lib.Type_INT32, lib.Type_INT64} _UNSIGNED_INTEGER_TYPES = {lib.Type_UINT8, lib.Type_UINT16, lib.Type_UINT32, lib.Type_UINT64} _INTEGER_TYPES = _SIGNED_INTEGER_TYPES | _UNSIGNED_INTEGER_TYPES _FLOATING_TYPES = {lib.Type_HALF_FLOAT, lib.Type_FLOAT, lib.Type_DOUBLE} _DATE_TYPES = {lib.Type_DATE32, lib.Type_DATE64} _TIME_TYPES = {lib.Type_TIME32, lib.Type_TIME64} _TEMPORAL_TYPES = {lib.Type_TIMESTAMP, lib.Type_DURATION} | _TIME_TYPES | _DATE_TYPES _NESTED_TYPES = {lib.Type_LIST, lib.Type_LARGE_LIST, lib.Type_STRUCT, lib.Type_UNION, lib.Type_MAP} def is_null(t): """ Return True if value is an instance of a null type. """ return t.id == lib.Type_NA def is_boolean(t): """ Return True if value is an instance of a boolean type. """ return t.id == lib.Type_BOOL def is_integer(t): """ Return True if value is an instance of any integer type. """ return t.id in _INTEGER_TYPES def is_signed_integer(t): """ Return True if value is an instance of any signed integer type. """ return t.id in _SIGNED_INTEGER_TYPES def is_unsigned_integer(t): """ Return True if value is an instance of any unsigned integer type. """ return t.id in _UNSIGNED_INTEGER_TYPES def is_int8(t): """ Return True if value is an instance of an int8 type. """ return t.id == lib.Type_INT8 def is_int16(t): """ Return True if value is an instance of an int16 type. """ return t.id == lib.Type_INT16 def is_int32(t): """ Return True if value is an instance of an int32 type. """ return t.id == lib.Type_INT32 def is_int64(t): """ Return True if value is an instance of an int64 type. """ return t.id == lib.Type_INT64 def is_uint8(t): """ Return True if value is an instance of an uint8 type. """ return t.id == lib.Type_UINT8 def is_uint16(t): """ Return True if value is an instance of an uint16 type. """ return t.id == lib.Type_UINT16 def is_uint32(t): """ Return True if value is an instance of an uint32 type. """ return t.id == lib.Type_UINT32 def is_uint64(t): """ Return True if value is an instance of an uint64 type. """ return t.id == lib.Type_UINT64 def is_floating(t): """ Return True if value is an instance of a floating point numeric type. """ return t.id in _FLOATING_TYPES def is_float16(t): """ Return True if value is an instance of a float16 (half-precision) type. """ return t.id == lib.Type_HALF_FLOAT def is_float32(t): """ Return True if value is an instance of a float32 (single precision) type. """ return t.id == lib.Type_FLOAT def is_float64(t): """ Return True if value is an instance of a float64 (double precision) type. """ return t.id == lib.Type_DOUBLE def is_list(t): """ Return True if value is an instance of a list type. """ return t.id == lib.Type_LIST def is_large_list(t): """ Return True if value is an instance of a large list type. """ return t.id == lib.Type_LARGE_LIST def is_fixed_size_list(t): """ Return True if value is an instance of a fixed size list type. """ return t.id == lib.Type_FIXED_SIZE_LIST def is_struct(t): """ Return True if value is an instance of a struct type. """ return t.id == lib.Type_STRUCT def is_union(t): """ Return True if value is an instance of a union type. """ return t.id == lib.Type_UNION def is_nested(t): """ Return True if value is an instance of a nested type. """ return t.id in _NESTED_TYPES def is_temporal(t): """ Return True if value is an instance of date, time, timestamp or duration. """ return t.id in _TEMPORAL_TYPES def is_timestamp(t): """ Return True if value is an instance of a timestamp type. """ return t.id == lib.Type_TIMESTAMP def is_duration(t): """ Return True if value is an instance of a duration type. """ return t.id == lib.Type_DURATION def is_time(t): """ Return True if value is an instance of a time type. """ return t.id in _TIME_TYPES def is_time32(t): """ Return True if value is an instance of a time32 type. """ return t.id == lib.Type_TIME32 def is_time64(t): """ Return True if value is an instance of a time64 type. """ return t.id == lib.Type_TIME64 def is_binary(t): """ Return True if value is an instance of a variable-length binary type. """ return t.id == lib.Type_BINARY def is_large_binary(t): """ Return True if value is an instance of a large variable-length binary type. """ return t.id == lib.Type_LARGE_BINARY def is_unicode(t): """ Alias for is_string. """ return is_string(t) def is_string(t): """ Return True if value is an instance of string (utf8 unicode) type. """ return t.id == lib.Type_STRING def is_large_unicode(t): """ Alias for is_large_string. """ return is_large_string(t) def is_large_string(t): """ Return True if value is an instance of large string (utf8 unicode) type. """ return t.id == lib.Type_LARGE_STRING def is_fixed_size_binary(t): """ Return True if value is an instance of a fixed size binary type. """ return t.id == lib.Type_FIXED_SIZE_BINARY def is_date(t): """ Return True if value is an instance of a date type. """ return t.id in _DATE_TYPES def is_date32(t): """ Return True if value is an instance of a date32 (days) type. """ return t.id == lib.Type_DATE32 def is_date64(t): """ Return True if value is an instance of a date64 (milliseconds) type. """ return t.id == lib.Type_DATE64 def is_map(t): """ Return True if value is an instance of a map logical type. """ return t.id == lib.Type_MAP def is_decimal(t): """ Return True if value is an instance of a decimal type. """ return t.id == lib.Type_DECIMAL def is_dictionary(t): """ Return True if value is an instance of a dictionary-encoded type. """ return t.id == lib.Type_DICTIONARY def is_primitive(t): """ Return True if the value is an instance of a primitive type. """ return lib._is_primitive(t.id)