123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- from __future__ import annotations
- from functools import reduce
- import numpy as np
- from pandas._config import get_option
- def ensure_decoded(s) -> str:
- """
- If we have bytes, decode them to unicode.
- """
- if isinstance(s, (np.bytes_, bytes)):
- s = s.decode(get_option("display.encoding"))
- return s
- def result_type_many(*arrays_and_dtypes):
- """
- Wrapper around numpy.result_type which overcomes the NPY_MAXARGS (32)
- argument limit.
- """
- try:
- return np.result_type(*arrays_and_dtypes)
- except ValueError:
- # we have > NPY_MAXARGS terms in our expression
- return reduce(np.result_type, arrays_and_dtypes)
- except TypeError:
- from pandas.core.dtypes.cast import find_common_type
- from pandas.core.dtypes.common import is_extension_array_dtype
- arr_and_dtypes = list(arrays_and_dtypes)
- ea_dtypes, non_ea_dtypes = [], []
- for arr_or_dtype in arr_and_dtypes:
- if is_extension_array_dtype(arr_or_dtype):
- ea_dtypes.append(arr_or_dtype)
- else:
- non_ea_dtypes.append(arr_or_dtype)
- if non_ea_dtypes:
- try:
- np_dtype = np.result_type(*non_ea_dtypes)
- except ValueError:
- np_dtype = reduce(np.result_type, arrays_and_dtypes)
- return find_common_type(ea_dtypes + [np_dtype])
- return find_common_type(ea_dtypes)
|