def is_compatible_broadcast_shape(src_shape, dst_shape):
    """
    Check if src_shape can be broadcasted to dst_shape
    dst_shape needs to be numpy compatible with src_shape, and each matching
    dimension for dst_shape must be equal or larger than src_shape

    Args:
        src_shape: tuple or list, shape of the source tensor
        dst_shape: tuple or list, shape of the desination tensor

    Returns:
        True if src_shape can be broadcasted to dst_shape
    """
    if len(src_shape) > len(dst_shape):
        return False
    is_compatible = lambda l, r: l == 1 or l == r
    for l, r in zip(src_shape, dst_shape[-len(src_shape):]):
        if not is_compatible(l, r):
            return False
    return True