Source code for vocalpy.annotation

"""Class that represents annotation data."""

from __future__ import annotations

import pathlib

import attrs
import crowsetta


[docs] @attrs.define class Annotation: """Class that represents annotation data. Attributes ---------- data : crowsetta.Annotation path : pathlib.Path """ data: crowsetta.Annotation = attrs.field( validator=attrs.validators.instance_of(crowsetta.Annotation) ) path: pathlib.Path
[docs] @classmethod def read( cls, path: str | pathlib.Path, format: str, **kwargs ) -> Annotation: """Read an annotation from a file Parameters ---------- path : str, pathlib.Path Path to file containing annotations. format : str Annotation file format. Must be a valid format recognized by :mod:`crowsetta`. kwargs : keyword arguments Optional keyword arguments. If specified, these are passed to :meth:`crowsetta.Transcriber.from_file`. Returns ------- annot : Annotation An :class:`~vocalpy.Annotation` instance that contains the annotations read from ``path``. """ path = pathlib.Path(path) if not path.exists(): raise FileNotFoundError(f"Annotation file not found: {path}") try: scribe = crowsetta.Transcriber(format=format) except ValueError as e: raise ValueError( f"Unable to load format: {format}. Please run `crowsetta.formats.as_list()` " "to confirm that it is a valid format name." ) from e annot_in_format = scribe.from_file(path, **kwargs) annot = annot_in_format.to_annot() return cls(data=annot, path=path)