From 19e74cd8bf4a15a3edc975f98cb2de4359fc87cf Mon Sep 17 00:00:00 2001
From: PrimozGodec
Date: Mon, 3 Apr 2023 11:51:29 +0200
Subject: [PATCH 1/5] polynomialtransform - use get_column instead of
get_column_view
---
orangecontrib/educational/widgets/utils/polynomialtransform.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/orangecontrib/educational/widgets/utils/polynomialtransform.py b/orangecontrib/educational/widgets/utils/polynomialtransform.py
index 1e72138f..71c9a6a0 100644
--- a/orangecontrib/educational/widgets/utils/polynomialtransform.py
+++ b/orangecontrib/educational/widgets/utils/polynomialtransform.py
@@ -82,7 +82,7 @@ def __call__(self, data):
elif inst:
data_col = np.array([float(data[attr_index])])
else:
- data_col = data.get_column_view(attr_index)[0]
+ data_col = data.get_column(attr_index)
data_all.append(data_col)
transformed_col = self.transform(data_all)
if (inst and isinstance(transformed_col, np.ndarray) and
From 26564e2d2ec17a4058e4100b8bb9031eaefdf26c Mon Sep 17 00:00:00 2001
From: PrimozGodec
Date: Mon, 3 Apr 2023 11:56:58 +0200
Subject: [PATCH 2/5] KMeans - replace get_column_view with get_column
---
orangecontrib/educational/widgets/owkmeans.py | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/orangecontrib/educational/widgets/owkmeans.py b/orangecontrib/educational/widgets/owkmeans.py
index 5e635ada..f3facc3a 100644
--- a/orangecontrib/educational/widgets/owkmeans.py
+++ b/orangecontrib/educational/widgets/owkmeans.py
@@ -613,8 +613,7 @@ def _prepare_data(self):
Return None if there are no non-nan columns
"""
attrs = [self.attr_x, self.attr_y]
- x = np.vstack(tuple(self.data.get_column_view(attr)[0]
- for attr in attrs)).T
+ x = np.vstack(tuple(self.data.get_column(attr) for attr in attrs)).T
not_nan = ~np.isnan(x).any(axis=1)
x = x[not_nan] # remove rows with nan
if not x.size:
From 861168fa72a6bf873b165e3f60f406bad2f4cfe0 Mon Sep 17 00:00:00 2001
From: PrimozGodec
Date: Mon, 3 Apr 2023 12:13:42 +0200
Subject: [PATCH 3/5] polynomial transform tests - fix precision error
---
.../utils/tests/test_polynomialtransform.py | 47 ++++++++++---------
1 file changed, 24 insertions(+), 23 deletions(-)
diff --git a/orangecontrib/educational/widgets/utils/tests/test_polynomialtransform.py b/orangecontrib/educational/widgets/utils/tests/test_polynomialtransform.py
index 487b2271..833c5f8c 100644
--- a/orangecontrib/educational/widgets/utils/tests/test_polynomialtransform.py
+++ b/orangecontrib/educational/widgets/utils/tests/test_polynomialtransform.py
@@ -43,30 +43,31 @@ def test_plynomial_transform(self):
transformed_data = polynomial_transform(self.data)
for i, row in enumerate(transformed_data):
- self.assertEqual(row[0], self.data[i][0])
- self.assertEqual(row[1], self.data[i][1])
+ self.assertAlmostEqual(row[0], self.data[i][0])
+ self.assertAlmostEqual(row[1], self.data[i][1])
- self.assertEqual(row[2], self.data[i][0] ** 2)
- self.assertEqual(row[3], self.data[i][0] * self.data[i][1])
- self.assertEqual(row[4], self.data[i][1] ** 2)
+ self.assertAlmostEqual(row[2], self.data[i][0] ** 2)
+ self.assertAlmostEqual(row[3], self.data[i][0] * self.data[i][1])
+ self.assertAlmostEqual(row[4], self.data[i][1] ** 2)
- self.assertEqual(row[5], self.data[i][0] ** 3)
- self.assertEqual(row[6], self.data[i][0] ** 2 * self.data[i][1])
- self.assertEqual(row[7], self.data[i][0] * self.data[i][1] ** 2)
- self.assertEqual(row[8], self.data[i][1] ** 3)
+ self.assertAlmostEqual(row[5], self.data[i][0] ** 3)
+ self.assertAlmostEqual(row[6], self.data[i][0] ** 2 * self.data[i][1])
+ self.assertAlmostEqual(row[7], self.data[i][0] * self.data[i][1] ** 2)
+ self.assertAlmostEqual(row[8], self.data[i][1] ** 3)
- self.assertEqual(row[9], self.data[i][0] ** 4)
- self.assertEqual(row[10], self.data[i][0] ** 3 * self.data[i][1])
- self.assertEqual(
- row[11], self.data[i][0] ** 2 * self.data[i][1] ** 2)
- self.assertEqual(row[12], self.data[i][0] * self.data[i][1] ** 3)
- self.assertEqual(row[13], self.data[i][1] ** 4)
+ self.assertAlmostEqual(row[9], self.data[i][0] ** 4)
+ self.assertAlmostEqual(row[10], self.data[i][0] ** 3 * self.data[i][1])
+ self.assertAlmostEqual(row[11], self.data[i][0] ** 2 * self.data[i][1] ** 2)
+ self.assertAlmostEqual(row[12], self.data[i][0] * self.data[i][1] ** 3)
+ self.assertAlmostEqual(row[13], self.data[i][1] ** 4)
- self.assertEqual(row[14], self.data[i][0] ** 5)
- self.assertEqual(row[15], self.data[i][0] ** 4 * self.data[i][1])
- self.assertEqual(
- row[16], self.data[i][0] ** 3 * self.data[i][1] ** 2)
- self.assertEqual(
- row[17], self.data[i][0] ** 2 * self.data[i][1] ** 3)
- self.assertEqual(row[18], self.data[i][0] * self.data[i][1] ** 4)
- self.assertEqual(row[19], self.data[i][1] ** 5)
+ self.assertAlmostEqual(row[14], self.data[i][0] ** 5)
+ self.assertAlmostEqual(row[15], self.data[i][0] ** 4 * self.data[i][1])
+ self.assertAlmostEqual(row[16], self.data[i][0] ** 3 * self.data[i][1] ** 2)
+ self.assertAlmostEqual(row[17], self.data[i][0] ** 2 * self.data[i][1] ** 3)
+ self.assertAlmostEqual(row[18], self.data[i][0] * self.data[i][1] ** 4)
+ self.assertAlmostEqual(row[19], self.data[i][1] ** 5)
+
+
+if __name__ == "__main__":
+ unittest.main()
From 03f858275f146aa83e413da7ea03adde20bbf282 Mon Sep 17 00:00:00 2001
From: PrimozGodec
Date: Mon, 3 Apr 2023 12:29:47 +0200
Subject: [PATCH 4/5] 1ka - fix PyQt6 compatibility
---
orangecontrib/educational/widgets/ow1ka.py | 24 +++++-----------------
1 file changed, 5 insertions(+), 19 deletions(-)
diff --git a/orangecontrib/educational/widgets/ow1ka.py b/orangecontrib/educational/widgets/ow1ka.py
index 9807db47..ba8c85ed 100644
--- a/orangecontrib/educational/widgets/ow1ka.py
+++ b/orangecontrib/educational/widgets/ow1ka.py
@@ -20,20 +20,7 @@
from Orange.data import Table
from Orange.widgets.utils.signals import Output
from Orange.widgets.utils.webview import WebviewWidget
-try:
- from Orange.widgets.utils.webview import wait
-except ImportError: # WebKit and before wait() was toplevel
- import time
- from AnyQt.QtWidgets import qApp
- from AnyQt.QtCore import QEventLoop
-
- def wait(until: callable, timeout=5000):
- started = time.perf_counter()
- while not until():
- qApp.processEvents(QEventLoop.ExcludeUserInputEvents)
- if (time.perf_counter() - started) * 1000 > timeout:
- raise TimeoutError()
-
+from orangewidget.utils.webview import wait
log = logging.getLogger(__name__)
@@ -353,8 +340,7 @@ def set_info(self):
if __name__ == "__main__":
- a = QApplication([])
- ow = OW1ka()
- ow.combo.setEditText('https://www.1ka.si/podatki/139234/A4228E24/')
- ow.show()
- a.exec_()
+ from orangewidget.utils.widgetpreview import WidgetPreview
+
+ # use link: https://www.1ka.si/podatki/139234/A4228E24/
+ widget_preview = WidgetPreview(OW1ka).run()
From 21859306b67fc8a0ccb5716b8c5a6a3cf7f9608f Mon Sep 17 00:00:00 2001
From: PrimozGodec
Date: Mon, 3 Apr 2023 12:35:09 +0200
Subject: [PATCH 5/5] Gradient Descent - fix pyqt6 compatibility
---
orangecontrib/educational/widgets/owgradientdescent.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/orangecontrib/educational/widgets/owgradientdescent.py b/orangecontrib/educational/widgets/owgradientdescent.py
index cd6b5dd0..5e576f2d 100644
--- a/orangecontrib/educational/widgets/owgradientdescent.py
+++ b/orangecontrib/educational/widgets/owgradientdescent.py
@@ -307,12 +307,12 @@ def disable_controls(self, disabled):
self.restart_button, self.properties_box, self.options_box]:
item.setDisabled(disabled)
- key_actions = {(0, Qt.Key_Space): step} # space button for step
+ key_actions = {(Qt.NoModifier, Qt.Key_Space): step} # space button for step
def keyPressEvent(self, e):
"""Bind 'back' key to step back"""
- if (int(e.modifiers()), e.key()) in self.key_actions:
- fun = self.key_actions[(int(e.modifiers()), e.key())]
+ if (e.modifiers(), e.key()) in self.key_actions:
+ fun = self.key_actions[(e.modifiers(), e.key())]
fun(self)
else:
super().keyPressEvent(e)