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)