def _is_compliant_shape(a, b):
    """Compares shapes of two arguments.

    If size of a dimensions is None, this dimension size is ignored.
    Example:
        assert _is_compliant_shape((1, 2, 3), (1, 2, 3))
        assert _is_compliant_shape((1, 2, 3), (1, None, 3))
        assert not _is_compliant_shape((1, 2, 3), (1, 10, 3))
        assert not _is_compliant_shape((1, 2), (1,))

    :return: True, if the shapes are compliant
    """
    if len(a) != len(b):
        return False
    for i in range(len(a)):
        if a[i] and b[i]:
            if a[i] != b[i]:
                return False
    return True