Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/evaluate/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
from .info import ComparisonInfo, EvaluationModuleInfo, MeasurementInfo, MetricInfo
from .inspect import inspect_evaluation_module, list_evaluation_modules
from .loading import load
from .module import CombinedEvaluations, Comparison, EvaluationModule, Measurement, Metric, combine
from .module import CombinedEvaluations, Comparison, EvaluationModule, EvaluationModuleError, Measurement, Metric, combine
from .saving import save
from .utils import *
from .utils import gradio, logging
25 changes: 24 additions & 1 deletion src/evaluate/module.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,22 @@

logger = get_logger(__name__)

class EvaluationModuleError(Exception):
"""Exception raised when an :class:`EvaluationModule` computation fails.

Wraps internal errors (e.g. from sklearn or numpy) so callers can catch
evaluate-specific failures without catching broad :exc:`Exception`.

Example::

import evaluate
acc = evaluate.load("accuracy")
try:
acc.compute(predictions=[], references=[])
except evaluate.EvaluationModuleError as e:
print(f"Metric computation failed: {e}")
"""


class FileFreeLock(BaseFileLock):
"""Thread lock until a file **cannot** be locked"""
Expand Down Expand Up @@ -464,7 +480,14 @@ def compute(self, *, predictions=None, references=None, **kwargs) -> Optional[di

inputs = {input_name: self.data[input_name][:] for input_name in self._feature_names()}
with temp_seed(self.seed):
output = self._compute(**inputs, **compute_kwargs)
try:
output = self._compute(**inputs, **compute_kwargs)
except EvaluationModuleError:
raise
except Exception as e:
raise EvaluationModuleError(
f"Metric computation failed for '{self.name}': {e}"
) from e

if self.buf_writer is not None:
self.buf_writer = None
Expand Down