From dc9c7232c4bdf61404fe76dcbf6edf87c4fd2b7b Mon Sep 17 00:00:00 2001 From: Alexandre Sajus Date: Sun, 21 Nov 2021 15:58:16 +0100 Subject: [PATCH 1/4] :beetle: Saves and loads output --- examples/mnist.ipyg | 118 ++++++++++++++++-------- opencodeblocks/graphics/blocks/block.py | 9 +- 2 files changed, 87 insertions(+), 40 deletions(-) diff --git a/examples/mnist.ipyg b/examples/mnist.ipyg index b24ec8d2..66fa79e8 100644 --- a/examples/mnist.ipyg +++ b/examples/mnist.ipyg @@ -5,13 +5,19 @@ "id": 2443477874008, "title": "Model Train", "block_type": "code", - "source": "model.fit(x=x_train,y=y_train, epochs=10)\r\n\r\n", + "source": "model.fit(x=x_train,y=y_train, epochs=1)\r\n", + "stdout": "", + "image": "", + "splitter_pos": [ + 70, + 39 + ], "position": [ - 2022.4804687499986, - -313.02343749999983 + 1798.359374999999, + -320.3476562499999 ], - "width": 641.5, - "height": 223.25, + "width": 554, + "height": 163, "metadata": { "title_metadata": { "color": "white", @@ -39,7 +45,7 @@ "id": 2443477875160, "type": "output", "position": [ - 641.5, + 554.0, 42.0 ], "metadata": { @@ -55,13 +61,19 @@ "id": 2443477924600, "title": "Keras Model Predict", "block_type": "code", - "source": "prediction = np.argmax(model.predict(x_test[9].reshape(1, 28, 28, 1)))\r\nplt.imshow(x_test[9], cmap='gray')\r\nplt.title(\"Predicted: \" + str(prediction))", + "source": "rd_index = np.random.randint(len(x_test))\r\nprediction = np.argmax(model.predict(x_test[rd_index].reshape(1, 28, 28, 1)))\r\nplt.imshow(x_test[rd_index], cmap='gray')\r\nplt.title(\"Predicted: \" + str(prediction))", + "stdout": "Text(0.5, 1.0, 'Predicted: 3')", + "image": "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\n", + "splitter_pos": [ + 93, + 296 + ], "position": [ - 2771.796874999998, - -145.09374999999983 + 2467.5976562499977, + -207.10546874999986 ], - "width": 627.1875, - "height": 479.3749999999999, + "width": 784, + "height": 443, "metadata": { "title_metadata": { "color": "white", @@ -89,7 +101,7 @@ "id": 2443477925752, "type": "output", "position": [ - 627.1875, + 784.0, 42.0 ], "metadata": { @@ -106,12 +118,18 @@ "title": "Keras Model eval", "block_type": "code", "source": "model.evaluate(x_test, y_test)\r\n", + "stdout": "[0.0608346052467823, 0.9805999994277954]", + "image": "", + "splitter_pos": [ + 70, + 43 + ], "position": [ - 2779.039062499998, - -401.77343749999955 + 2557.4570312499995, + -418.3749999999995 ], - "width": 647.75, - "height": 221.75, + "width": 579, + "height": 167, "metadata": { "title_metadata": { "color": "white", @@ -139,7 +157,7 @@ "id": 2443477998184, "type": "output", "position": [ - 647.75, + 579.0, 42.0 ], "metadata": { @@ -156,12 +174,18 @@ "title": "Load MNIST Dataset", "block_type": "code", "source": "from tensorflow.keras.datasets import mnist\r\n(x_train, y_train), (x_test, y_test) = mnist.load_data()\r\n", + "stdout": "", + "image": "", + "splitter_pos": [ + 80, + 50 + ], "position": [ - -710.2500000000002, - -384.25 + -678.5742187500001, + -328.27734375 ], - "width": 787.0000000000001, - "height": 240.83333333333337, + "width": 616, + "height": 184, "metadata": { "title_metadata": { "color": "white", @@ -175,7 +199,7 @@ "id": 2443478910728, "type": "output", "position": [ - 787.0000000000001, + 616.0, 42.0 ], "metadata": { @@ -191,13 +215,19 @@ "id": 2443478982728, "title": "Normalize Image Dataset", "block_type": "code", - "source": "x_train = x_train.astype('float32') / 255.0\r\nx_test = x_test.astype('float32') / 255.0\r\n\r\nx_train = x_train.reshape(x_train.shape[0], 28, 28, 1)\r\nx_test = x_test.reshape(x_test.shape[0], 28, 28, 1)\r\n\r\nprint('train:', x_train.shape, '|test:', x_test.shape)", + "source": "x_train = x_train.astype('float32') / 255.0\r\nx_test = x_test.astype('float32') / 255.0\r\n\r\nx_train = x_train.reshape(x_train.shape[0], 28, 28, 1)\r\nx_test = x_test.reshape(x_test.shape[0], 28, 28, 1)\r\n\r\nprint('train:', x_train.shape, '|test:', x_test.shape)\r\n", + "stdout": "train: (60000, 28, 28, 1) |test: (10000, 28, 28, 1)\n", + "image": "", + "splitter_pos": [ + 161, + 46 + ], "position": [ - 256.50000000000045, - -538.7499999999998 + 145.26953125000063, + -511.3085937499998 ], - "width": 733.2499999999995, - "height": 309.0, + "width": 621, + "height": 261, "metadata": { "title_metadata": { "color": "white", @@ -225,7 +255,7 @@ "id": 2443478983880, "type": "output", "position": [ - 733.2499999999995, + 621.0, 42.0 ], "metadata": { @@ -242,12 +272,18 @@ "title": "Build Keras CNN", "block_type": "code", "source": "import tensorflow as tf\r\nfrom tensorflow.keras.layers import (Dense, Flatten,\r\nConv2D, MaxPooling2D, Dropout)\r\nfrom tensorflow.keras.models import Sequential\r\n\r\nmodel = Sequential()\r\nmodel.add(Conv2D(28, kernel_size=(3,3), input_shape=x_train.shape[1:]))\r\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\r\nmodel.add(Flatten())\r\nmodel.add(Dense(128, activation=tf.nn.relu))\r\nmodel.add(Dropout(0.2))\r\nmodel.add(Dense(10,activation=tf.nn.softmax))\r\n\r\nmodel.compile(optimizer='adam', \r\n loss='sparse_categorical_crossentropy', \r\n metrics=['accuracy'])\r\n", + "stdout": "", + "image": "", + "splitter_pos": [ + 334, + 58 + ], "position": [ - 1039.5, - -350.7499999999999 + 912.546875, + -404.4609374999999 ], - "width": 863.0, - "height": 509.75, + "width": 775, + "height": 446, "metadata": { "title_metadata": { "color": "white", @@ -275,7 +311,7 @@ "id": 2443479018808, "type": "output", "position": [ - 863.0, + 775.0, 42.0 ], "metadata": { @@ -291,13 +327,19 @@ "id": 2828158533848, "title": "Plot Image Dataset Example", "block_type": "code", - "source": "import matplotlib.pyplot as plt\r\nimport numpy as np\r\n\r\n# Display an example from the dataset\r\nrd_index = np.random.randint(len(x_train))\r\nplt.imshow(x_train[rd_index], cmap='gray')\r\nplt.title('Class '+ str(y_train[0]))\r\n\r\n", + "source": "import matplotlib.pyplot as plt\r\nimport numpy as np\r\n\r\n# Display an example from the dataset\r\nrd_index = np.random.randint(len(x_train))\r\nplt.imshow(x_train[rd_index], cmap='gray')\r\nplt.title('Class '+ str(y_train[rd_index]))\r\n", + "stdout": "Text(0.5, 1.0, 'Class 3')", + "image": "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\n", + "splitter_pos": [ + 158, + 281 + ], "position": [ - 328.75, - -174.25 + 208.4375000000001, + -193.390625 ], - "width": 574.0, - "height": 565.5, + "width": 491, + "height": 493, "metadata": { "title_metadata": { "color": "white", diff --git a/opencodeblocks/graphics/blocks/block.py b/opencodeblocks/graphics/blocks/block.py index c7e05840..855ede76 100644 --- a/opencodeblocks/graphics/blocks/block.py +++ b/opencodeblocks/graphics/blocks/block.py @@ -49,6 +49,8 @@ def __init__(self, block_type: str = 'base', source: str = '', position: tuple = self.block_type = block_type self.source = source + self.stdout = "" + self.image = "" self.setPos(QPointF(*position)) self.sockets_in = [] self.sockets_out = [] @@ -91,7 +93,7 @@ def __init__(self, block_type: str = 'base', source: str = '', position: tuple = self.size_grip = BlockSizeGrip(self, self.root) - if type(self) == OCBBlock: # DO NOT TRUST codacy !!! isinstance != type + if type(self) == OCBBlock: # DO NOT TRUST codacy !!! isinstance != type # This has to be called at the end of the constructor of # every class inheriting this. self.holder.setWidget(self.root) @@ -293,6 +295,8 @@ def serialize(self) -> OrderedDict: ('title', self.title), ('block_type', self.block_type), ('source', self.source), + ('stdout', self.stdout), + ('image', self.image), ('splitter_pos', self.splitter.sizes()), ('position', [self.pos().x(), self.pos().y()]), ('width', self.width), @@ -306,7 +310,8 @@ def deserialize(self, data: dict, hashmap: dict = None, restore_id=True) -> None: if restore_id: self.id = data['id'] - for dataname in ('title', 'block_type', 'source', 'width', 'height'): + for dataname in ('title', 'block_type', 'source', 'stdout', + 'image', 'width', 'height'): setattr(self, dataname, data[dataname]) self.setPos(QPointF(*data['position'])) From 06faf32ddfa7f296a756da482936b75fc07257bd Mon Sep 17 00:00:00 2001 From: Alexandre Sajus Date: Sun, 21 Nov 2021 15:59:21 +0100 Subject: [PATCH 2/4] :beetle: Saves source on focusOutEvent --- opencodeblocks/graphics/pyeditor.py | 1 + 1 file changed, 1 insertion(+) diff --git a/opencodeblocks/graphics/pyeditor.py b/opencodeblocks/graphics/pyeditor.py index 70e571c6..fc5952fb 100644 --- a/opencodeblocks/graphics/pyeditor.py +++ b/opencodeblocks/graphics/pyeditor.py @@ -103,4 +103,5 @@ def focusInEvent(self, event: QFocusEvent): def focusOutEvent(self, event: QFocusEvent): """ PythonEditor reaction to PyQt focusOut events. """ self.set_views_mode("MODE_NOOP") + self.block.source = self.text() return super().focusOutEvent(event) From 135990408f43fe4cda1a7cbbf7bb798a49ea242f Mon Sep 17 00:00:00 2001 From: Alexandre Sajus Date: Sun, 21 Nov 2021 16:14:54 +0100 Subject: [PATCH 3/4] :umbrella: Converts the test graph to new format --- tests/assets/example_graph1.ipyg | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/assets/example_graph1.ipyg b/tests/assets/example_graph1.ipyg index 588e72bf..9bc51a65 100644 --- a/tests/assets/example_graph1.ipyg +++ b/tests/assets/example_graph1.ipyg @@ -6,6 +6,8 @@ "title": "Model Train", "block_type": "code", "source": "print(\"training \")\r\nmodel.fit(x=x_train,y=y_train, epochs=10)\r\n\r\n", + "stdout": "", + "image": "", "position": [ 2202.0742187499986, -346.82031249999983 @@ -56,6 +58,8 @@ "title": "Keras Model Predict", "block_type": "code", "source": "prediction = model.predict(x_test[9].reshape(1, 28, 28, 1))", + "stdout": "", + "image": "", "position": [ 4207.046874999999, -244.57812499999991 @@ -106,6 +110,8 @@ "title": "Keras Model eval", "block_type": "code", "source": "model.evaluate(x_test, y_test)\r\n", + "stdout": "", + "image": "", "position": [ 4204.085937499997, -707.0546874999997 @@ -156,6 +162,8 @@ "title": "Load MNIST Dataset", "block_type": "code", "source": "print(\"Hello, world\")\r\nfrom tensorflow.keras.datasets import mnist\r\n(x_train, y_train), (x_test, y_test) = mnist.load_data()\r\n", + "stdout": "", + "image": "", "position": [ -535.75, -687.0625 @@ -192,6 +200,8 @@ "title": "Normalize Image Dataset", "block_type": "code", "source": "x_train = x_train.astype('float32') / 255.0\r\nx_test = x_test.astype('float32') / 255.0\r\n\r\n\r\nx_train = x_train.reshape(x_train.shape[0], 28, 28, 1)\r\nx_test = x_test.reshape(x_test.shape[0], 28, 28, 1)\r\n\r\nprint('train:', x_train.shape, '|test:', x_test.shape)", + "stdout": "", + "image": "", "position": [ 281.2500000000002, -149.74999999999977 @@ -242,6 +252,8 @@ "title": "Build Keras CNN", "block_type": "code", "source": "import tensorflow as tf\r\nfrom tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPooling2D, Dropout\r\nfrom tensorflow.keras.models import Sequential\r\n\r\nmodel = Sequential()\r\nmodel.add(Conv2D(28, kernel_size=(3,3), input_shape=x_train.shape[1:]))\r\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\r\nmodel.add(Flatten())\r\nmodel.add(Dense(128, activation=tf.nn.relu))\r\nmodel.add(Dropout(0.2))\r\nmodel.add(Dense(10,activation=tf.nn.softmax))\r\nprint(\"..\")\r\nmodel.compile(optimizer='adam', \r\n loss='sparse_categorical_crossentropy', \r\n metrics=['accuracy'])\r\n", + "stdout": "", + "image": "", "position": [ 1316.25, -517.6249999999998 @@ -292,6 +304,8 @@ "title": "Plot Image Dataset Example", "block_type": "code", "source": "import matplotlib.pyplot as plt\r\nimport numpy as np\r\n\r\n# Display an example from the dataset\r\nrd_index = np.random.randint(len(x_train))\r\nplt.imshow(x_train[rd_index], cmap='gray')\r\nplt.title('Class '+ str(y_train[0]))\r\n", + "stdout": "", + "image": "", "position": [ 433.375, -1221.75 From 69b7e1571ad0c549ded209c59119517596028dd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Math=C3=AFs=20F=C3=A9d=C3=A9rico?= Date: Sun, 21 Nov 2021 18:08:19 +0100 Subject: [PATCH 4/4] :wrench: Updated mnist example --- examples/mnist.ipyg | 146 ++++++++++++++++++++++---------------------- 1 file changed, 73 insertions(+), 73 deletions(-) diff --git a/examples/mnist.ipyg b/examples/mnist.ipyg index 66fa79e8..343095ab 100644 --- a/examples/mnist.ipyg +++ b/examples/mnist.ipyg @@ -5,19 +5,19 @@ "id": 2443477874008, "title": "Model Train", "block_type": "code", - "source": "model.fit(x=x_train,y=y_train, epochs=1)\r\n", - "stdout": "", + "source": "model.fit(x=x_train,y=y_train, epochs=4)\r\n", + "stdout": "", "image": "", "splitter_pos": [ - 70, - 39 + 88, + 41 ], "position": [ - 1798.359374999999, - -320.3476562499999 + 964.3749999999993, + -260.5820312499999 ], - "width": 554, - "height": 163, + "width": 618, + "height": 184, "metadata": { "title_metadata": { "color": "white", @@ -41,11 +41,25 @@ "radius": 6.0 } }, + { + "id": 2443467875017, + "type": "input", + "position": [ + 0.0, + 162.0 + ], + "metadata": { + "color": "#e02c2c", + "linecolor": "#FF000000", + "linewidth": 1.0, + "radius": 6.0 + } + }, { "id": 2443477875160, "type": "output", "position": [ - 554.0, + 618.0, 42.0 ], "metadata": { @@ -63,17 +77,17 @@ "block_type": "code", "source": "rd_index = np.random.randint(len(x_test))\r\nprediction = np.argmax(model.predict(x_test[rd_index].reshape(1, 28, 28, 1)))\r\nplt.imshow(x_test[rd_index], cmap='gray')\r\nplt.title(\"Predicted: \" + str(prediction))", "stdout": "Text(0.5, 1.0, 'Predicted: 3')", - "image": "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\n", + "image": "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\n", "splitter_pos": [ - 93, - 296 + 0, + 252 ], "position": [ - 2467.5976562499977, - -207.10546874999986 + 1684.3164062499977, + -14.605468749999908 ], - "width": 784, - "height": 443, + "width": 300, + "height": 307, "metadata": { "title_metadata": { "color": "white", @@ -101,7 +115,7 @@ "id": 2443477925752, "type": "output", "position": [ - 784.0, + 300.0, 42.0 ], "metadata": { @@ -117,19 +131,19 @@ "id": 2443477997032, "title": "Keras Model eval", "block_type": "code", - "source": "model.evaluate(x_test, y_test)\r\n", - "stdout": "[0.0608346052467823, 0.9805999994277954]", + "source": "metrics = model.evaluate(x_test, y_test)\r\nprint(f\"mean_loss:{metrics[0]:.2f}, mean_acc:{metrics[1]:.2f}\")\r\n", + "stdout": "mean_loss:0.05184061825275421, mean_acc:0.9848999977111816\n", "image": "", "splitter_pos": [ - 70, - 43 + 66, + 32 ], "position": [ - 2557.4570312499995, - -418.3749999999995 + 1701.42578125, + -260.12499999999955 ], - "width": 579, - "height": 167, + "width": 879, + "height": 153, "metadata": { "title_metadata": { "color": "white", @@ -157,7 +171,7 @@ "id": 2443477998184, "type": "output", "position": [ - 579.0, + 879.0, 42.0 ], "metadata": { @@ -177,8 +191,8 @@ "stdout": "", "image": "", "splitter_pos": [ - 80, - 50 + 85, + 44 ], "position": [ -678.5742187500001, @@ -219,12 +233,12 @@ "stdout": "train: (60000, 28, 28, 1) |test: (10000, 28, 28, 1)\n", "image": "", "splitter_pos": [ - 161, + 160, 46 ], "position": [ - 145.26953125000063, - -511.3085937499998 + 0.7382812500006821, + -327.7148437499999 ], "width": 621, "height": 261, @@ -275,15 +289,15 @@ "stdout": "", "image": "", "splitter_pos": [ - 334, - 58 + 333, + 85 ], "position": [ - 912.546875, - -404.4609374999999 + -130.81249999999977, + -35.32031249999997 ], - "width": 775, - "height": 446, + "width": 1002, + "height": 473, "metadata": { "title_metadata": { "color": "white", @@ -293,25 +307,11 @@ } }, "sockets": [ - { - "id": 2443479018520, - "type": "input", - "position": [ - 0.0, - 42.0 - ], - "metadata": { - "color": "#FF55FFF0", - "linecolor": "#FF000000", - "linewidth": 1.0, - "radius": 6.0 - } - }, { "id": 2443479018808, "type": "output", "position": [ - 775.0, + 1002.0, 42.0 ], "metadata": { @@ -328,18 +328,18 @@ "title": "Plot Image Dataset Example", "block_type": "code", "source": "import matplotlib.pyplot as plt\r\nimport numpy as np\r\n\r\n# Display an example from the dataset\r\nrd_index = np.random.randint(len(x_train))\r\nplt.imshow(x_train[rd_index], cmap='gray')\r\nplt.title('Class '+ str(y_train[rd_index]))\r\n", - "stdout": "Text(0.5, 1.0, 'Class 3')", - "image": "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\n", + "stdout": "Text(0.5, 1.0, 'Class 5')", + "image": "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\n", "splitter_pos": [ - 158, - 281 + 0, + 254 ], "position": [ - 208.4375000000001, - -193.390625 + 59.60937500000014, + -660.1874999999999 ], - "width": 491, - "height": 493, + "width": 302, + "height": 309, "metadata": { "title_metadata": { "color": "white", @@ -368,12 +368,24 @@ ], "edges": [ { - "id": 1643571233840, + "id": 1575284436416, "path_type": "bezier", "source": { "block": 2443479017656, "socket": 2443479018808 }, + "destination": { + "block": 2443477874008, + "socket": 2443467875017 + } + }, + { + "id": 1575284436848, + "path_type": "bezier", + "source": { + "block": 2443478982728, + "socket": 2443478983880 + }, "destination": { "block": 2443477874008, "socket": 2443477875016 @@ -403,18 +415,6 @@ "socket": 2443477925608 } }, - { - "id": 2111730223424, - "path_type": "bezier", - "source": { - "block": 2443478982728, - "socket": 2443478983880 - }, - "destination": { - "block": 2443479017656, - "socket": 2443479018520 - } - }, { "id": 2111730224144, "path_type": "bezier",