From c74f225fb71848a67d5391d20a9bcd10db073d18 Mon Sep 17 00:00:00 2001
From: "Egli Adrian (IT-SCI-API-PFI)" <adrian.egli@sbb.ch>
Date: Wed, 29 May 2019 22:07:34 +0200
Subject: [PATCH] editor notebook works fine with PILSVG

---
 flatland/utils/editor.py       | 11 ++++++++++-
 flatland/utils/graphics_pil.py |  2 +-
 flatland/utils/rendertools.py  |  1 +
 notebooks/Editor2.ipynb        | 36 +++++++++++++++++++++++++++++++---
 4 files changed, 45 insertions(+), 5 deletions(-)

diff --git a/flatland/utils/editor.py b/flatland/utils/editor.py
index 1f4a604..ccff0fa 100644
--- a/flatland/utils/editor.py
+++ b/flatland/utils/editor.py
@@ -177,7 +177,15 @@ class View(object):
         with self.wOutput:
             # plt.figure(figsize=(10, 10))
             self.oRT.set_new_rail()
-            self.oRT.renderEnv(spacing=False, arrows=False, sRailColor="gray",
+
+            self.model.env.agents = self.model.env.agents_static
+            for a in self.model.env.agents:
+                if hasattr(a, 'old_position') == False:
+                    a.old_position = a.position
+                if hasattr(a, 'old_direction') == False:
+                    a.old_direction = a.direction
+
+            self.oRT.renderEnv(spacing=False, arrows=False, sRailColor="gray",agents=True,
                                show=False, iSelectedAgent=self.model.iSelectedAgent,
                                show_observations=self.show_observations())
             img = self.oRT.getImage()
@@ -344,6 +352,7 @@ class Controller(object):
                     continue
                 if iAgent == self.model.iSelectedAgent:
                     agent.direction = (agent.direction + 1) % 4
+                    agent.old_direction = agent.direction
         self.model.redraw()
 
     def restartAgents(self, event):
diff --git a/flatland/utils/graphics_pil.py b/flatland/utils/graphics_pil.py
index d9a2864..2a06f40 100644
--- a/flatland/utils/graphics_pil.py
+++ b/flatland/utils/graphics_pil.py
@@ -147,7 +147,7 @@ class PILGL(GraphicsLayer):
 
     def show(self, block=False):
         img = self.alpha_composite_layers()
-        
+
         if not self.window_open:
             self.open_window()
         
diff --git a/flatland/utils/rendertools.py b/flatland/utils/rendertools.py
index a4ad66d..1c2185b 100644
--- a/flatland/utils/rendertools.py
+++ b/flatland/utils/rendertools.py
@@ -773,6 +773,7 @@ class RenderTool(object):
                     self.gl.setRailAt(r, c, binTrans, iTarget=target)
 
         for iAgent, agent in enumerate(self.env.agents):
+
             if agent is None:
                 continue
 
diff --git a/notebooks/Editor2.ipynb b/notebooks/Editor2.ipynb
index 0705369..ef0a208 100644
--- a/notebooks/Editor2.ipynb
+++ b/notebooks/Editor2.ipynb
@@ -78,7 +78,7 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "<flatland.utils.graphics_pil.PILSVG object at 0x00000207B4DA0198> <class 'flatland.utils.graphics_pil.PILSVG'>\n",
+      "<flatland.utils.graphics_pil.PILSVG object at 0x000001FFD1ED30B8> <class 'flatland.utils.graphics_pil.PILSVG'>\n",
       "<super: <class 'PILSVG'>, <PILSVG object>> <class 'super'>\n",
       " 0000000000000000 Background_#91D1DD.svg\n",
       "WE 0000000000000100 Gleis_Deadend.svg\n",
@@ -149,7 +149,7 @@
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "198e07236e2e4996accf8134a4641f6b",
+       "model_id": "9112df48349a47eb8f3a790e1565c011",
        "version_major": 2,
        "version_minor": 0
       },
@@ -159,6 +159,36 @@
      },
      "metadata": {},
      "output_type": "display_data"
+    },
+    {
+     "ename": "TypeError",
+     "evalue": "can not serialize 'numpy.int32' object",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[1;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
+      "\u001b[1;32mc:\\users\\u216993\\appdata\\local\\programs\\python\\python36\\lib\\site-packages\\flatland_rl-0.1.1-py3.6.egg\\flatland\\utils\\editor.py\u001b[0m in \u001b[0;36msave\u001b[1;34m(self, event)\u001b[0m\n\u001b[0;32m    374\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    375\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0msave\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mevent\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 376\u001b[1;33m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmodel\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msave\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    377\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    378\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0mstep\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mevent\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
+      "\u001b[1;32mc:\\users\\u216993\\appdata\\local\\programs\\python\\python36\\lib\\site-packages\\flatland_rl-0.1.1-py3.6.egg\\flatland\\utils\\editor.py\u001b[0m in \u001b[0;36msave\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    670\u001b[0m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"save to \"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0menv_filename\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\" working dir: \"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mos\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgetcwd\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    671\u001b[0m         \u001b[1;31m# self.env.rail.save_transition_map(self.env_filename)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 672\u001b[1;33m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0menv\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msave\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0menv_filename\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    673\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    674\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0mregenerate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnAgents\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0menv\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
+      "\u001b[1;32mc:\\users\\u216993\\appdata\\local\\programs\\python\\python36\\lib\\site-packages\\flatland_rl-0.1.1-py3.6.egg\\flatland\\envs\\rail_env.py\u001b[0m in \u001b[0;36msave\u001b[1;34m(self, filename)\u001b[0m\n\u001b[0;32m    372\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0msave\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfilename\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    373\u001b[0m         \u001b[1;32mwith\u001b[0m \u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"wb\"\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mfile_out\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 374\u001b[1;33m             \u001b[0mfile_out\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mwrite\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_full_state_msg\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    375\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    376\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0mload\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfilename\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
+      "\u001b[1;32mc:\\users\\u216993\\appdata\\local\\programs\\python\\python36\\lib\\site-packages\\flatland_rl-0.1.1-py3.6.egg\\flatland\\envs\\rail_env.py\u001b[0m in \u001b[0;36mget_full_state_msg\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    343\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    344\u001b[0m         \u001b[0mmsgpack\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpackb\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mgrid_data\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 345\u001b[1;33m         \u001b[0mmsgpack\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpackb\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0magent_data\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    346\u001b[0m         \u001b[0mmsgpack\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpackb\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0magent_static_data\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    347\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
+      "\u001b[1;32mc:\\users\\u216993\\appdata\\local\\programs\\python\\python36\\lib\\site-packages\\msgpack\\__init__.py\u001b[0m in \u001b[0;36mpackb\u001b[1;34m(o, **kwargs)\u001b[0m\n\u001b[0;32m     44\u001b[0m     \u001b[0mSee\u001b[0m \u001b[1;33m:\u001b[0m\u001b[1;32mclass\u001b[0m\u001b[1;33m:\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0mPacker\u001b[0m\u001b[0;31m`\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0moptions\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     45\u001b[0m     \"\"\"\n\u001b[1;32m---> 46\u001b[1;33m     \u001b[1;32mreturn\u001b[0m \u001b[0mPacker\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpack\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mo\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     47\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     48\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
+      "\u001b[1;32mmsgpack\\_packer.pyx\u001b[0m in \u001b[0;36mmsgpack._cmsgpack.Packer.pack\u001b[1;34m()\u001b[0m\n",
+      "\u001b[1;32mmsgpack\\_packer.pyx\u001b[0m in \u001b[0;36mmsgpack._cmsgpack.Packer.pack\u001b[1;34m()\u001b[0m\n",
+      "\u001b[1;32mmsgpack\\_packer.pyx\u001b[0m in \u001b[0;36mmsgpack._cmsgpack.Packer.pack\u001b[1;34m()\u001b[0m\n",
+      "\u001b[1;32mmsgpack\\_packer.pyx\u001b[0m in \u001b[0;36mmsgpack._cmsgpack.Packer._pack\u001b[1;34m()\u001b[0m\n",
+      "\u001b[1;32mmsgpack\\_packer.pyx\u001b[0m in \u001b[0;36mmsgpack._cmsgpack.Packer._pack\u001b[1;34m()\u001b[0m\n",
+      "\u001b[1;32mmsgpack\\_packer.pyx\u001b[0m in \u001b[0;36mmsgpack._cmsgpack.Packer._pack\u001b[1;34m()\u001b[0m\n",
+      "\u001b[1;32mmsgpack\\_packer.pyx\u001b[0m in \u001b[0;36mmsgpack._cmsgpack.Packer._pack\u001b[1;34m()\u001b[0m\n",
+      "\u001b[1;31mTypeError\u001b[0m: can not serialize 'numpy.int32' object"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Clear rails\n",
+      "Clear rails\n"
+     ]
     }
    ],
    "source": [
@@ -175,7 +205,7 @@
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "47371e94faa3422ca2d6b1d6e7a83e4f",
+       "model_id": "2e4b58af24e84522a374d8bd7221c273",
        "version_major": 2,
        "version_minor": 0
       },
-- 
GitLab