def from_attributes(attrs, skip_non_categorical=False):
    """Creates a :class:`fiftyone.core.labels.Classifications` from a list of
    attributes.

    Args:
        attrs: an iterable of ``eta.core.data.Attribute`` instances
        skip_non_categorical (False): whether to skip non-categorical
            attributes (True) or cast all attribute values to strings
            (False)

    Returns:
        a :class:`fiftyone.core.labels.Classifications`
    """
    classifications = []
    for attr in attrs:
        if skip_non_categorical and not etau.is_str(attr.value):
            continue

        classifications.append(from_attribute(attr))

    return fol.Classifications(classifications=classifications)
Creates a :class:`fiftyone.core.labels.Classifications` from a list of
    attributes.

    Args:
        attrs: an iterable of ``eta.core.data.Attribute`` instances
        skip_non_categorical (False): whether to skip non-categorical
            attributes (True) or cast all attribute values to strings
            (False)

    Returns:
        a :class:`fiftyone.core.labels.Classifications`
    
fiftyone/utils/eta.py