Coverage for credoai/evaluators/utils/utils.py: 91%
34 statements
« prev ^ index » next coverage.py v7.1.0, created at 2023-02-13 21:56 +0000
« prev ^ index » next coverage.py v7.1.0, created at 2023-02-13 21:56 +0000
1import inspect
2import os
3import pkgutil
5from credoai.evaluators.evaluator import Evaluator
8def name2evaluator(evaluator_name):
9 """Converts evaluator name to evaluator class"""
10 for eval in all_subclasses(Evaluator):
11 if evaluator_name == eval.__name__:
12 return eval
13 raise Exception(
14 f"<{evaluator_name}> not found in list of Evaluators. Please confirm specified evaluator name is identical to Evaluator class definition."
15 )
18def all_subclasses(cls):
19 return set(cls.__subclasses__()).union(
20 [s for c in cls.__subclasses__() for s in all_subclasses(c)]
21 )
24def list_evaluators_exhaustive():
25 """List all defined evaluation modules"""
26 evaluator_path = os.path.dirname(os.path.dirname(__file__))
27 return pkgutil.iter_modules([evaluator_path])
30def list_evaluators():
31 """List subset of all defined evaluators where the module is importable"""
32 evaluators = list(list_evaluators_exhaustive())
33 importer = evaluators[0][0]
34 # get loadable modules
35 usable_modules = []
36 for evaluator in evaluators:
37 module = importer.find_module(evaluator[1])
38 try:
39 m = module.load_module()
40 usable_modules.append((evaluator[1], m))
41 except (ModuleNotFoundError, ImportError):
42 pass
43 # get evaluators from loadable modules
44 usable_evaluators = []
45 for module in usable_modules:
46 try:
47 for m in inspect.getmembers(module[1], inspect.isclass):
48 if m[1].__module__ == module[0] and isinstance(m[1](), Evaluator):
49 usable_evaluators.append(m)
50 except:
51 pass
52 return usable_evaluators