Source code for vak.prep.frame_classification.validators

"""Validators for frame classification datasets"""

from __future__ import annotations

import pandas as pd


[docs] def validate_and_get_frame_dur( dataset_df: pd.DataFrame, input_type: str ) -> float: """Validate that there is a single, unique value for the frame duration for all samples (audio signals / spectrograms) in a dataset. If so, return that value. The dataset is represented as a pandas DataFrame. Parameters ---------- dataset_df : pandas.Dataframe A pandas.DataFrame created by :func:`vak.prep.spectrogram_dataset.prep_spectrogram_dataset` or :func:`vak.prep.audio_dataset.prep_audio_dataset`. input_type : str The type of input to the neural network model. One of {'audio', 'spect'}. Returns ------- frame_dur : float The duration of a time bin in seconds for all spectrograms in the dataset. """ from .. import constants # avoid circular import if input_type not in constants.INPUT_TYPES: raise ValueError( f"``input_type`` must be one of: {constants.INPUT_TYPES}\n" f"Value for ``input_type`` was: {input_type}" ) # TODO: handle possible KeyError here? if input_type == "audio": frame_dur = dataset_df["sample_dur"].unique() elif input_type == "spect": frame_dur = dataset_df["timebin_dur"].unique() if len(frame_dur) > 1: raise ValueError( f"Found more than one frame duration in dataset: {frame_dur}" ) frame_dur = frame_dur.item() return frame_dur