From 027b79557d9223873a181bcdde1679651ffc8ed8 Mon Sep 17 00:00:00 2001
From: hagrid67 <jdhwatson@gmail.com>
Date: Thu, 16 May 2019 15:40:46 +0100
Subject: [PATCH] fixing msgpack serialization probs with numpy arrays
 appearing in EnvAgent

---
 flatland/envs/agent_utils.py | 14 +++++++++++++-
 flatland/envs/rail_env.py    |  5 +++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/flatland/envs/agent_utils.py b/flatland/envs/agent_utils.py
index 1f1bc1d..05f81e4 100644
--- a/flatland/envs/agent_utils.py
+++ b/flatland/envs/agent_utils.py
@@ -1,6 +1,7 @@
 
 from attr import attrs, attrib
 from itertools import starmap
+import numpy as np
 # from flatland.envs.rail_env import RailEnv
 
 
@@ -36,7 +37,18 @@ class EnvAgentStatic(object):
         return list(starmap(EnvAgentStatic, zip(positions, directions, targets)))
 
     def to_list(self):
-        return [self.position, self.direction, self.target]
+
+        # I can't find an expression which works on both tuples, lists and ndarrays
+        # which converts them all to a list of native python ints.
+        lPos = self.position
+        if type(lPos) is np.ndarray:
+            lPos = lPos.tolist()
+
+        lTarget = self.target
+        if type(lTarget) is np.ndarray:
+            lTarget = lTarget.tolist()
+
+        return [lPos, int(self.direction), lTarget]
 
 
 @attrs
diff --git a/flatland/envs/rail_env.py b/flatland/envs/rail_env.py
index a5248a8..de3401a 100644
--- a/flatland/envs/rail_env.py
+++ b/flatland/envs/rail_env.py
@@ -328,6 +328,11 @@ class RailEnv(Environment):
         grid_data = self.rail.grid.tolist()
         agent_static_data = [agent.to_list() for agent in self.agents_static]
         agent_data = [agent.to_list() for agent in self.agents]
+
+        msgpack.packb(grid_data)
+        msgpack.packb(agent_data)
+        msgpack.packb(agent_static_data)
+
         msg_data = {
             "grid": grid_data,
             "agents_static": agent_static_data,
-- 
GitLab