def _infer_fill_value(val):
if not is_list_like(val):<EOL><INDENT>val = [val]<EOL><DEDENT>val = np.array(val, copy=False)<EOL>if is_datetimelike(val):<EOL><INDENT>return np.array('<STR_LIT>', dtype=val.dtype)<EOL><DEDENT>elif is_object_dtype(val.dtype):<EOL><INDENT>dtype = lib.infer_dtype(ensure_object(val), skipna=False)<EOL>if dtype in ['<STR_LIT>', '<STR_LIT>']:<EOL><INDENT>return np.array('<STR_LIT>', dtype=_NS_DTYPE)<EOL><DEDENT>elif dtype in ['<STR_LIT>', '<STR_LIT>']:<EOL><INDENT>return np.array('<STR_LIT>', dtype=_TD_DTYPE)<EOL><DEDENT><DEDENT>return np.nan<EOL>
infer the fill value for the nan/NaT from the provided
scalar/ndarray/list-like if we are a NaT, return the correct dtyped
element to provide proper block construction