import numpy as np from pandas.core.dtypes.cast import can_hold_element def test_can_hold_element_range(any_int_numpy_dtype): # GH#44261 dtype = np.dtype(any_int_numpy_dtype) arr = np.array([], dtype=dtype) rng = range(2, 127) assert can_hold_element(arr, rng) # negatives -> can't be held by uint dtypes rng = range(-2, 127) if dtype.kind == "i": assert can_hold_element(arr, rng) else: assert not can_hold_element(arr, rng) rng = range(2, 255) if dtype == "int8": assert not can_hold_element(arr, rng) else: assert can_hold_element(arr, rng) rng = range(-255, 65537) if dtype.kind == "u": assert not can_hold_element(arr, rng) elif dtype.itemsize < 4: assert not can_hold_element(arr, rng) else: assert can_hold_element(arr, rng) # empty rng = range(-(10**10), -(10**10)) assert len(rng) == 0 # assert can_hold_element(arr, rng) rng = range(10**10, 10**10) assert len(rng) == 0 assert can_hold_element(arr, rng) def test_can_hold_element_int_values_float_ndarray(): arr = np.array([], dtype=np.int64) element = np.array([1.0, 2.0]) assert can_hold_element(arr, element) assert not can_hold_element(arr, element + 0.5) # integer but not losslessly castable to int64 element = np.array([3, 2**65], dtype=np.float64) assert not can_hold_element(arr, element) def test_can_hold_element_int8_int(): arr = np.array([], dtype=np.int8) element = 2 assert can_hold_element(arr, element) assert can_hold_element(arr, np.int8(element)) assert can_hold_element(arr, np.uint8(element)) assert can_hold_element(arr, np.int16(element)) assert can_hold_element(arr, np.uint16(element)) assert can_hold_element(arr, np.int32(element)) assert can_hold_element(arr, np.uint32(element)) assert can_hold_element(arr, np.int64(element)) assert can_hold_element(arr, np.uint64(element)) element = 2**9 assert not can_hold_element(arr, element) assert not can_hold_element(arr, np.int16(element)) assert not can_hold_element(arr, np.uint16(element)) assert not can_hold_element(arr, np.int32(element)) assert not can_hold_element(arr, np.uint32(element)) assert not can_hold_element(arr, np.int64(element)) assert not can_hold_element(arr, np.uint64(element))