Passed
Pull Request — main (#798)
by
unknown
02:57
created

annif.backend._xtransformer()   A

Complexity

Conditions 2

Size

Total Lines 8
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 7
nop 0
dl 0
loc 8
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 _xtransformer() -> Type[AnnifBackend]:
93
    try:
94
        from . import xtransformer
95
96
        return xtransformer.XTransformerBackend
97
    except ImportError:
98
        raise ValueError(
99
            "XTransformer not available, not enabling XTransformer backend"
100
        )
101
102
103
def _yake() -> Type[AnnifBackend]:
104
    try:
105
        from . import yake
106
107
        return yake.YakeBackend
108
    except ImportError:
109
        raise ValueError("YAKE not available, cannot use yake backend")
110
111
112
# registry of the above functions
113
_backend_fns = {
114
    "dummy": _dummy,
115
    "ensemble": _ensemble,
116
    "fasttext": _fasttext,
117
    "http": _http,
118
    "mllm": _mllm,
119
    "nn_ensemble": _nn_ensemble,
120
    "omikuji": _omikuji,
121
    "pav": _pav,
122
    "stwfsa": _stwfsa,
123
    "svc": _svc,
124
    "tfidf": _tfidf,
125
    "xtransformer": _xtransformer,
126
    "yake": _yake,
127
}
128
129
130
def get_backend(backend_id: str) -> Type[AnnifBackend]:
131
    if backend_id in _backend_fns:
132
        return _backend_fns[backend_id]()
133
    else:
134
        raise ValueError("No such backend type {}".format(backend_id))
135