from annotations.stereotype import evaluation_methods
import importlib
import pkgutil
import os

package_name = os.path.dirname("evaluations")
package = importlib.import_module("evaluations")
for _, module_name, _ in pkgutil.walk_packages(package.__path__, package.__name__ + "."):
    importlib.import_module(module_name)

class EvalFunctionFactory:
    @staticmethod
    def create(eval_type_list):
        def eval_func(output, data):
            temp_results = {"scalars": {}, "points": {}, "images": {}}
            for eval_type in eval_type_list:
                if eval_type in evaluation_methods:
                    result = evaluation_methods[eval_type](output, data)
                    for k, v in result.items():
                        temp_results[k].update(v)
            results = {}
            for k, v in temp_results.items():
                if len(v) > 0:
                    results[k] = v
            return results

        return eval_func


''' ------------ Debug ------------ '''
if __name__ == "__main__":
    from configs.config import ConfigManager

    ConfigManager.load_config_with('../configs/local_train_config.yaml')
    ConfigManager.print_config()
