From 8aa2d0cd119e976f081c60568755bed7bfceb143 Mon Sep 17 00:00:00 2001 From: mbsantiago Date: Mon, 11 Aug 2025 12:02:30 +0100 Subject: [PATCH] Add evaluation config with match strategy --- src/batdetect2/evaluate/__init__.py | 8 +++++++- src/batdetect2/evaluate/config.py | 25 +++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 src/batdetect2/evaluate/config.py diff --git a/src/batdetect2/evaluate/__init__.py b/src/batdetect2/evaluate/__init__.py index bf7c41d..9bcaebf 100644 --- a/src/batdetect2/evaluate/__init__.py +++ b/src/batdetect2/evaluate/__init__.py @@ -1,9 +1,15 @@ +from batdetect2.evaluate.config import ( + EvaluationConfig, + load_evaluation_config, +) from batdetect2.evaluate.match import ( match_predictions_and_annotations, match_sound_events_and_raw_predictions, ) __all__ = [ - "match_sound_events_and_raw_predictions", + "EvaluationConfig", + "load_evaluation_config", "match_predictions_and_annotations", + "match_sound_events_and_raw_predictions", ] diff --git a/src/batdetect2/evaluate/config.py b/src/batdetect2/evaluate/config.py new file mode 100644 index 0000000..22ae469 --- /dev/null +++ b/src/batdetect2/evaluate/config.py @@ -0,0 +1,25 @@ +from typing import Optional + +from pydantic import Field +from soundevent import data + +from batdetect2.configs import BaseConfig, load_config +from batdetect2.evaluate.match import DEFAULT_MATCH_CONFIG, MatchConfig + +__all__ = [ + "EvaluationConfig", + "load_evaluation_config", +] + + +class EvaluationConfig(BaseConfig): + match: MatchConfig = Field( + default_factory=lambda: DEFAULT_MATCH_CONFIG.model_copy(), + ) + + +def load_evaluation_config( + path: data.PathLike, + field: Optional[str] = None, +) -> EvaluationConfig: + return load_config(path, schema=EvaluationConfig, field=field)