def infer_dtype_from_value()

in torcharrow/dtypes.py [0:0]


def infer_dtype_from_value(value):
    if value is None:
        return Void()
    if isinstance(value, (bool, np.bool8)):
        return prt(value, boolean)
    if isinstance(value, (np.int8)):
        return prt(value, int8)
    if isinstance(value, (np.int16)):
        return prt(value, int16)
    if isinstance(value, (np.int32)):
        return prt(value, int32)
    if isinstance(value, (int, np.integer)):
        return prt(value, int64)
    if isinstance(value, np.float64):
        # please make sure this `if` check precedes the below one, since
        # the `np.float64` is also the instance of `float`
        return prt(value, float64)
    if isinstance(value, (float, np.float32)):
        return prt(value, float32)
    if isinstance(value, (str, np.str_)):
        return prt(value, string)
    if isinstance(value, list):
        dtype = infer_dtype_from_prefix(value[:PREFIX_LENGTH])
        return prt(value, List(dtype))
    if isinstance(value, dict):
        key_dtype = infer_dtype_from_prefix(list(value.keys())[:PREFIX_LENGTH])
        items_dtype = infer_dtype_from_prefix(list(value.values())[:PREFIX_LENGTH])
        return prt(value, Map(key_dtype, items_dtype))
    if isinstance(value, tuple):
        dtypes = []
        for t in value:
            dtypes.append(infer_dtype_from_value(t))
        return prt(value, Tuple(dtypes))
    raise AssertionError(f"unexpected case {value} of type {type(value)}")