annif.backend._omikuji()   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 7
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 6
nop 0
dl 0
loc 7
rs 10
c 0
b 0
f 0
1
"""Registry of backend types for Annif"""
2
3
from __future__ import annotations
4
5
from typing import TYPE_CHECKING, Type
6
7
if TYPE_CHECKING:
8
    from annif.backend.backend import AnnifBackend
9
10
11
# define functions for lazily importing each backend (alphabetical order)
12
def _dummy() -> Type[AnnifBackend]:
13
    from . import dummy
14
15
    return dummy.DummyBackend
16
17
18
def _ensemble() -> Type[AnnifBackend]:
19
    from . import ensemble
20
21
    return ensemble.EnsembleBackend
22
23
24
def _fasttext() -> Type[AnnifBackend]:
25
    try:
26
        from . import fasttext
27
28
        return fasttext.FastTextBackend
29
    except ImportError:
30
        raise ValueError("fastText not available, cannot use fasttext backend")
31
32
33
def _http() -> Type[AnnifBackend]:
34
    from . import http
35
36
    return http.HTTPBackend
37
38
39
def _mllm() -> Type[AnnifBackend]:
40
    from . import mllm
41
42
    return mllm.MLLMBackend
43
44
45
def _nn_ensemble() -> Type[AnnifBackend]:
46
    try:
47
        from . import nn_ensemble
48
49
        return nn_ensemble.NNEnsembleBackend
50
    except ImportError:
51
        raise ValueError(
52
            "Keras and TensorFlow not available, cannot use " + "nn_ensemble backend"
53
        )
54
55
56
def _omikuji() -> Type[AnnifBackend]:
57
    try:
58
        from . import omikuji
59
60
        return omikuji.OmikujiBackend
61
    except ImportError:
62
        raise ValueError("Omikuji not available, cannot use omikuji backend")
63
64
65
def _pav() -> Type[AnnifBackend]:
66
    from . import pav
67
68
    return pav.PAVBackend
69
70
71
def _stwfsa() -> Type[AnnifBackend]:
72
    try:
73
        from . import stwfsa
74
75
        return stwfsa.StwfsaBackend
76
    except ImportError:
77
        raise ValueError("STWFSA not available, cannot use stwfsa backend")
78
79
80
def _svc() -> Type[AnnifBackend]:
81
    from . import svc
82
83
    return svc.SVCBackend
84
85
86
def _tfidf() -> Type[AnnifBackend]:
87
    from . import tfidf
88
89
    return tfidf.TFIDFBackend
90
91
92
def _yake() -> Type[AnnifBackend]:
93
    try:
94
        from . import yake
95
96
        return yake.YakeBackend
97
    except ImportError:
98
        raise ValueError("YAKE not available, cannot use yake backend")
99
100
101
# registry of the above functions
102
_backend_fns = {
103
    "dummy": _dummy,
104
    "ensemble": _ensemble,
105
    "fasttext": _fasttext,
106
    "http": _http,
107
    "mllm": _mllm,
108
    "nn_ensemble": _nn_ensemble,
109
    "omikuji": _omikuji,
110
    "pav": _pav,
111
    "stwfsa": _stwfsa,
112
    "svc": _svc,
113
    "tfidf": _tfidf,
114
    "yake": _yake,
115
}
116
117
118
def get_backend(backend_id: str) -> Type[AnnifBackend]:
119
    if backend_id in _backend_fns:
120
        return _backend_fns[backend_id]()
121
    else:
122
        raise ValueError("No such backend type {}".format(backend_id))
123