# 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} | _TIME_TYPES | _DATE_TYPES
_NESTED_TYPES = {lib.Type_LIST, lib.Type_STRUCT, lib.Type_UNION, lib.Type_MAP}
[docs]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
[docs]def is_signed_integer(t):
"""
Return True if value is an instance of any signed integer type
"""
return t.id in _SIGNED_INTEGER_TYPES
[docs]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
[docs]def is_uint8(t):
"""
Return True if value is an instance of an uint8 type
"""
return t.id == lib.Type_UINT8
[docs]def is_uint16(t):
"""
Return True if value is an instance of an uint16 type
"""
return t.id == lib.Type_UINT16
[docs]def is_uint32(t):
"""
Return True if value is an instance of an uint32 type
"""
return t.id == lib.Type_UINT32
[docs]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 an float16 (half-precision) type
"""
return t.id == lib.Type_HALF_FLOAT
def is_float32(t):
"""
Return True if value is an instance of an float32 (single precision) type
"""
return t.id == lib.Type_FLOAT
def is_float64(t):
"""
Return True if value is an instance of an 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
[docs]def is_struct(t):
"""
Return True if value is an instance of a struct type
"""
return t.id == lib.Type_STRUCT
[docs]def is_union(t):
"""
Return True if value is an instance of a union type
"""
return t.id == lib.Type_UNION
[docs]def is_nested(t):
"""
Return True if value is an instance of a nested type
"""
return t.id in _NESTED_TYPES
[docs]def is_temporal(t):
"""
Return True if value is an instance of a temporal (date, time, timestamp)
type
"""
return t.id in _TEMPORAL_TYPES
[docs]def is_timestamp(t):
"""
Return True if value is an instance of a timestamp type
"""
return t.id == lib.Type_TIMESTAMP
[docs]def is_time(t):
"""
Return True if value is an instance of a time type
"""
return t.id in _TIME_TYPES
[docs]def is_time32(t):
"""
Return True if value is an instance of a time32 type
"""
return t.id == lib.Type_TIME32
[docs]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
[docs]def is_unicode(t):
"""
Alias for is_string
"""
return is_string(t)
[docs]def is_string(t):
"""
Return True if value is an instance of string (utf8 unicode) type
"""
return t.id == lib.Type_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)