Skip to content

Commit fddd441

Browse files
committed
Group: Disable widget when gensim is not available
1 parent 85e7565 commit fddd441

File tree

4 files changed

+40
-7
lines changed

4 files changed

+40
-7
lines changed

i18n/si/msgs.jaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ network/community.py:
1515
def `label_propagation_hop_attenuation`:
1616
Undirected graph expected: false
1717
network/embeddings.py:
18+
'gensim library is required to use Node2Vec embedding. ': false
1819
class `Node2Vec`:
1920
def `__init__`:
2021
n2v: false
@@ -281,6 +282,8 @@ widgets/OWNxEmbeddings.py:
281282
Network: Mreža
282283
class `Outputs`:
283284
Items: Elementi
285+
class `Error`:
286+
This widget requires gensim, which is unsupported in Python>=3.14.: Ta gradnik zahteva gensim, ki ni podprt v Pythonu >= 3.14.
284287
def `__init__`:
285288
p: false
286289
'Return parameter (p): ': 'Parameter vrnitve (p): '

orangecontrib/network/tests/test_embeddings.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,31 @@
11
import unittest
2+
import datetime
23

34
import numpy as np
45
import scipy.sparse as sp
56
from Orange.data import Table, ContinuousVariable, Domain
67

78
from orangecontrib.network import Network
89
from orangecontrib.network.network.base import DirectedEdges, UndirectedEdges
9-
from orangecontrib.network.network.embeddings import Node2Vec
10-
10+
try:
11+
import gensim
12+
except ImportError:
13+
gensim = None
14+
else:
15+
from orangecontrib.network.network.embeddings import Node2Vec
1116

1217
class TestEmbeddings(unittest.TestCase):
18+
@classmethod
19+
def setUpClass(cls):
20+
if gensim is None:
21+
if datetime.date.today() < datetime.date(2026, 6, 1):
22+
raise unittest.SkipTest(
23+
"gensim library is required to run these tests.")
24+
else:
25+
raise RuntimeError(
26+
"Check whether gensim is supported "
27+
"and either update setup.py or change the above date.")
28+
1329
def setUp(self):
1430
row, col, w = zip(*((1, 2, 1.0), (1, 3, 3.0), (2, 3, 1.0), (2, 6, 0.5), (3, 4, 1.0), (4, 5, 1.0), (4, 7, -1.0),
1531
(5, 6, 0.0), (6, 5, 0.1), (6, 2, 0.1)))

orangecontrib/network/widgets/OWNxEmbeddings.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
1+
from orangewidget.widget import Msg
2+
13
try:
24
from gensim.models.callbacks import CallbackAny2Vec
35
except ImportError:
4-
raise ValueError("gensim library is required to use Node2Vec embedding. ")
6+
CallbackAny2Vec = None
57

68

79
from AnyQt.QtCore import Qt, QThread
810
from Orange.data import Table
911
from Orange.widgets.widget import OWWidget
1012
from orangewidget import gui, settings
1113
from orangewidget.utils.signals import Input, Output
14+
from orangewidget.utils.widgetpreview import WidgetPreview
1215

1316
from orangecontrib.network import Network
14-
from orangecontrib.network.network import embeddings, readwrite
15-
from orangewidget.utils.widgetpreview import WidgetPreview
17+
from orangecontrib.network.network import readwrite
18+
if CallbackAny2Vec is not None:
19+
from orangecontrib.network.network import embeddings
1620

1721

1822
class EmbedderThread(QThread):
@@ -28,7 +32,7 @@ def run(self):
2832
self.result = self.func()
2933

3034

31-
class ProgressBarUpdater(CallbackAny2Vec):
35+
class ProgressBarUpdater(CallbackAny2Vec or object):
3236
def __init__(self, widget, num_epochs):
3337
self.widget = widget
3438
self.curr_epoch = 0
@@ -56,6 +60,10 @@ class Inputs:
5660
class Outputs:
5761
items = Output("Items", Table)
5862

63+
class Error(OWWidget.Error):
64+
unsupported_gensim = Msg(
65+
"This widget requires gensim, which is unsupported in Python>=3.14.")
66+
5967
resizing_enabled = False
6068
want_main_area = False
6169

@@ -100,12 +108,18 @@ def commit():
100108
checkbox_label="Auto-commit", orientation=Qt.Horizontal)
101109
commit()
102110

111+
if CallbackAny2Vec is None:
112+
self.Error.unsupported_gensim()
113+
self.controlArea.setDisabled(True)
114+
103115
@Inputs.network
104116
def set_network(self, net):
105117
self.network = net
106118
self.commit()
107119

108120
def commit(self):
121+
if CallbackAny2Vec is None:
122+
return
109123
self.Warning.clear()
110124

111125
# cancel existing computation if running

orangecontrib/network/widgets/tests/test_OWNxGroups.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import unittest
22
from unittest.mock import Mock
33
from math import sqrt
4+
import datetime
45

56
import numpy as np
67
from scipy import sparse as sp
@@ -173,6 +174,5 @@ def test_weights(self):
173174
expected[3, 4] = 6 / sqrt(14 * 13) + 8 / sqrt(14 * 15)
174175
np.testing.assert_equal(groups.edges[0].edges.todense(), expected)
175176

176-
177177
if __name__ == "__main__":
178178
unittest.main()

0 commit comments

Comments
 (0)