aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/algorithms/impl/__init__.py
blob: 29cd51c2ae13420e9b75e7f288351506ec423f25 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Copyright 2016 Egor Tensin <Egor.Tensin@gmail.com>
# This file is licensed under the terms of the MIT License.
# See LICENSE.txt for details.

_ALL_ALGORITHMS = {}

def _refresh_algorithms():
    _ALGORITHMS_NAME = '_ALGORITHMS'
    global _ALL_ALGORITHMS
    _ALL_ALGORITHMS = {}

    from algorithms.algorithm import Algorithm

    from importlib import import_module
    import os.path
    from pkgutil import iter_modules

    for _, module_name, is_pkg in iter_modules([os.path.dirname(__file__)]):
        if is_pkg:
            continue
        module = import_module('.' + module_name, __package__)
        if hasattr(module, _ALGORITHMS_NAME):
            module_algorithms = getattr(module, _ALGORITHMS_NAME)
            for algorithm in module_algorithms:
                assert isinstance(algorithm, Algorithm)
                assert algorithm.get_codename() not in _ALL_ALGORITHMS
                _ALL_ALGORITHMS[algorithm.get_codename()] = algorithm

_refresh_algorithms()