def METHOD_NAME(usm_allocated, obj):
    """
    Copy from supported objects to USM allocated data.
    This function copies the data of a supported Python type (only
    numpy.ndarray is supported at this point) into object that
    defines a ``__sycl_usm_array_interface__`` attribute. For more information
    please refer to the specification of ``__sycl_usm_array_interface__``:
    https://github.com/IntelPython/dpctl/wiki/Zero-copy-data-exchange-using-SYCL-USM#sycl-usm-array-interface
    Args:
        usm_allocated: An object that should define a
        ``__sycl_usm_array_interface__`` dictionary. A TypeError is thrown
        if the object does not have such an attribute.
        obj (numpy.ndarray): Numpy ndarray, the data will be copied into.
    Raises:
        TypeError:
            If any argument is not of permitted type.
        ValueError:
            1. If size of data does not match.
            2. If obj is not C-contiguous.
    """
    usm_mem = has_usm_memory(usm_allocated)
    if usm_mem is None:
        raise TypeError("Source is not USM allocated.")
    if not isinstance(obj, np.ndarray):
        raise TypeError(
            "Obj is not USM allocated and is not of type "
            "numpy.ndarray. Obj type: %s" % (type(obj))
        )
    if obj.dtype not in [np.dtype(typ) for typ in supported_numpy_dtype]:
        raise ValueError(
            "dtype is not supprted. Supported dtypes "
            "are: %s" % (supported_numpy_dtype)
        )
    if not obj.flags.c_contiguous:
        raise ValueError(
            "Only C-contiguous numpy.ndarray is currently supported!"
        )
    size = np.prod(obj.shape)
    if usm_mem.size != (obj.dtype.itemsize * size):
        raise ValueError(
            "Size (Bytes) of data does not match. USM allocated "
            "memory size %d, supported object size: %d"
            % (usm_mem.size, (obj.dtype.itemsize * size))
        )
    obj_memview = memoryview(obj)
    obj_memview = obj_memview.cast("B")
    usm_mem.copy_from_host(obj_memview)