ReactSeq / onmt /scorers /__init__.py
Oopstom's picture
Upload 313 files
c668e80 verified
raw
history blame
1.57 kB
"""Module for dynamic scoring"""
import os
import importlib
from .scorer import Scorer, build_scorers
AVAILABLE_SCORERS = {}
def get_scorers_cls(metric_names):
"""Returns a dict with scorers related to the metrics
indicated in `metric_names`."""
scorers_cls = {}
for name in metric_names:
if name not in AVAILABLE_SCORERS.keys():
raise ValueError("specified metric not supported!")
scorers_cls[name] = AVAILABLE_SCORERS[name]
return scorers_cls
__all__ = ["get_scorers_cls", "build_scorers"]
def register_scorer(metric):
"""Scorer register that can be used to add new scorer class."""
def register_scorer_cls(cls):
if metric in AVAILABLE_SCORERS.keys():
raise ValueError(
"Cannot register duplicate scorer for metric ({})".format(metric)
)
if not issubclass(cls, Scorer):
raise ValueError(
"scorer ({}: {}) must extend Scorer".format(metric, cls.__name__)
)
AVAILABLE_SCORERS[metric] = cls
return cls
return register_scorer_cls
# Auto import python files in this directory
scorer_dir = os.path.dirname(__file__)
for file in os.listdir(scorer_dir):
path = os.path.join(scorer_dir, file)
if (
not file.startswith("_")
and not file.startswith(".")
and (file.endswith(".py") or os.path.isdir(path))
):
file_name = file[: file.find(".py")] if file.endswith(".py") else file
module = importlib.import_module("onmt.scorers." + file_name)