Source code for pyobo.api.combine

"""Functions that combine other API aspects."""

from collections.abc import Sequence

import curies
import ssslm
from typing_extensions import Unpack

from pyobo.api.hierarchy import get_descendants
from pyobo.api.names import get_literal_mappings
from pyobo.constants import GetOntologyKwargs
from pyobo.struct import Reference

__all__ = [
    "get_literal_mappings_subset",
]


[docs] def get_literal_mappings_subset( prefix: str, ancestors: curies.Reference | Sequence[curies.Reference], *, skip_obsolete: bool = False, **kwargs: Unpack[GetOntologyKwargs], ) -> list[ssslm.LiteralMapping]: """Get a subset of literal mappings under the given ancestors.""" if isinstance(ancestors, curies.Reference): ancestors = [ancestors] subset: set[Reference] = { descendant for ancestor in ancestors for descendant in get_descendants(ancestor, **kwargs) or [] } return [ literal_mapping for literal_mapping in get_literal_mappings(prefix, skip_obsolete=skip_obsolete, **kwargs) if literal_mapping.reference in subset ]