From c49d7d7ee691035e6b5ab05fc044a158d75b8627 Mon Sep 17 00:00:00 2001 From: u214892 <u214892@sbb.ch> Date: Mon, 3 Jun 2019 15:04:27 +0200 Subject: [PATCH] cleanup flake8 --- examples/demo.py | 19 ++---- flatland/utils/editor.py | 12 ++-- flatland/utils/graphics_layer.py | 4 +- flatland/utils/graphics_pil.py | 99 ++++++++++++++++---------------- flatland/utils/rendertools.py | 36 ++++++------ tests/test_player.py | 4 +- tests/test_rendertools.py | 9 ++- 7 files changed, 87 insertions(+), 96 deletions(-) diff --git a/examples/demo.py b/examples/demo.py index 28dad218..6b48d6a5 100644 --- a/examples/demo.py +++ b/examples/demo.py @@ -1,6 +1,7 @@ import os -import time import random +import time + import numpy as np from flatland.envs.generators import complex_rail_generator @@ -71,6 +72,7 @@ class Scenario_Generator: return env + class Demo: def __init__(self, env): @@ -80,7 +82,7 @@ class Demo: self.max_frame_rate = 60 self.record_frames = None - def set_record_frames(self,record_frames): + def set_record_frames(self, record_frames): self.record_frames = record_frames def create_renderer(self): @@ -88,7 +90,7 @@ class Demo: handle = self.env.get_agent_handles() return handle - def set_max_framerate(self,max_frame_rate): + def set_max_framerate(self, max_frame_rate): self.max_frame_rate = max_frame_rate def run_demo(self, max_nbr_of_steps=30): @@ -103,7 +105,6 @@ class Demo: # Action for iAgent in range(self.env.get_num_agents()): - # allways walk straight forward action = 2 @@ -114,18 +115,14 @@ class Demo: next_obs, all_rewards, done, _ = self.env.step(action_dict) # render - self.renderer.renderEnv(show=True,show_observations=False) + self.renderer.renderEnv(show=True, show_observations=False) if done['__all__']: break - - if self.record_frames is not None: self.renderer.gl.saveImage(self.record_frames.format(step)) - - self.renderer.close_window() @@ -155,22 +152,18 @@ if False: demo_flatland_000.run_demo(60) demo_flatland_000 = None - demo_flatland_000 = Demo(Scenario_Generator.load_scenario('./env-data/railway/example_network_003.pkl')) demo_flatland_000.renderer.resize() demo_flatland_000.set_max_framerate(5) demo_flatland_000.run_demo(30) demo_flatland_000 = None - demo_flatland_000 = Demo(Scenario_Generator.load_scenario('./env-data/railway/example_flatland_001.pkl')) demo_flatland_000.renderer.resize() demo_flatland_000.set_record_frames('./rendering/frame_{:04d}.bmp') demo_flatland_000.run_demo(60) demo_flatland_000 = None - - demo_001 = Demo(Scenario_Generator.load_scenario('./env-data/railway/example_flatland_001.pkl')) demo_001.set_record_frames('./rendering/frame_{:04d}.bmp') demo_001.run_demo(60) diff --git a/flatland/utils/editor.py b/flatland/utils/editor.py index ccff0fa7..58109b9b 100644 --- a/flatland/utils/editor.py +++ b/flatland/utils/editor.py @@ -180,12 +180,12 @@ class View(object): self.model.env.agents = self.model.env.agents_static for a in self.model.env.agents: - if hasattr(a, 'old_position') == False: + if hasattr(a, 'old_position') is False: a.old_position = a.position - if hasattr(a, 'old_direction') == False: + if hasattr(a, 'old_direction') is False: a.old_direction = a.direction - self.oRT.renderEnv(spacing=False, arrows=False, sRailColor="gray",agents=True, + 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() @@ -454,12 +454,12 @@ class EditorModel(object): # count integers along the larger dimension for iDelta0 in range(sgn0, delta0 + sgn0, sgn0): rDelta1 = iDelta0 * rcRatio - + if np.abs(rDelta1 - iDelta1) >= 1: rcInterp = (iDelta0, iDelta1) # fill in the "corner" for "Manhattan interpolation" lrcInterp.append(rcInterp) iDelta1 = int(rDelta1) - + rcInterp = (iDelta0, int(rDelta1)) lrcInterp.append(rcInterp) g2Interp = array(lrcInterp) @@ -469,7 +469,7 @@ class EditorModel(object): # Convert the array to a list of tuples lrcInterp = list(map(tuple, g2Interp)) return lrcInterp - + def drag_path_element(self, rcCell): """Mouse motion event handler for drawing. """ diff --git a/flatland/utils/graphics_layer.py b/flatland/utils/graphics_layer.py index 327cf4f6..8e08f7f8 100644 --- a/flatland/utils/graphics_layer.py +++ b/flatland/utils/graphics_layer.py @@ -1,7 +1,7 @@ - import matplotlib.pyplot as plt from numpy import array + class GraphicsLayer(object): def __init__(self): pass @@ -42,7 +42,7 @@ class GraphicsLayer(object): def getImage(self): pass - def saveImage(self,filename): + def saveImage(self, filename): pass def adaptColor(self, color, lighten=False): diff --git a/flatland/utils/graphics_pil.py b/flatland/utils/graphics_pil.py index 2a06f401..5b81b039 100644 --- a/flatland/utils/graphics_pil.py +++ b/flatland/utils/graphics_pil.py @@ -1,16 +1,19 @@ -from flatland.utils.graphics_layer import GraphicsLayer -from PIL import Image, ImageDraw, ImageTk # , ImageFont -import tkinter as tk -from numpy import array -import numpy as np -# from flatland.utils.svg import Track, Zug -import time import io import os import site +# from flatland.utils.svg import Track, Zug +import time +import tkinter as tk + +import numpy as np +from PIL import Image, ImageDraw, ImageTk # , ImageFont +from numpy import array + +from flatland.utils.graphics_layer import GraphicsLayer + def enable_windows_cairo_support(): - if os.name=='nt': + if os.name == 'nt': import site import ctypes.util default_os_path = os.environ['PATH'] @@ -20,14 +23,14 @@ def enable_windows_cairo_support(): os.environ['PATH'] = os.environ['PATH'] + ';' + default_os_path if ctypes.util.find_library('cairo') is not None: print("cairo installed: OK") -enable_windows_cairo_support() -from cairosvg import svg2png -from screeninfo import get_monitors -# from copy import copy -from flatland.core.transitions import RailEnvTransitions +enable_windows_cairo_support() +from cairosvg import svg2png # noqa: E402 +from screeninfo import get_monitors # noqa: E402 +# from copy import copy +from flatland.core.transitions import RailEnvTransitions # noqa: E402 class PILGL(GraphicsLayer): @@ -40,17 +43,16 @@ class PILGL(GraphicsLayer): self.width = width self.height = height - - if jupyter == False: + if jupyter is False: self.screen_width = 99999 self.screen_height = 99999 for m in get_monitors(): - self.screen_height = min(self.screen_height,m.height) - self.screen_width = min(self.screen_width,m.width) + self.screen_height = min(self.screen_height, m.height) + self.screen_width = min(self.screen_width, m.width) - w = (self.screen_width-self.width-10)/(self.width + 1 + self.linewidth) - h = (self.screen_height-self.height-10)/(self.height + 1 + self.linewidth) - self.nPixCell = int(max(1,np.ceil(min(w,h)))) + w = (self.screen_width - self.width - 10) / (self.width + 1 + self.linewidth) + h = (self.screen_height - self.height - 10) / (self.height + 1 + self.linewidth) + self.nPixCell = int(max(1, np.ceil(min(w, h)))) else: self.nPixCell = 40 @@ -64,14 +66,14 @@ class PILGL(GraphicsLayer): self.layers = [] self.draws = [] - self.tColBg = (255, 255, 255) # white background + self.tColBg = (255, 255, 255) # white background # self.tColBg = (220, 120, 40) # background color - self.tColRail = (0, 0, 0) # black rails - self.tColGrid = (230,) * 3 # light grey for grid + self.tColRail = (0, 0, 0) # black rails + self.tColGrid = (230,) * 3 # light grey for grid sColors = "d50000#c51162#aa00ff#6200ea#304ffe#2962ff#0091ea#00b8d4#00bfa5#00c853" + \ - "#64dd17#aeea00#ffd600#ffab00#ff6d00#ff3d00#5d4037#455a64" - + "#64dd17#aeea00#ffd600#ffab00#ff6d00#ff3d00#5d4037#455a64" + self.ltAgentColors = [self.rgb_s2i(sColor) for sColor in sColors.split("#")] self.nAgentColors = len(self.ltAgentColors) @@ -107,12 +109,12 @@ class PILGL(GraphicsLayer): def drawImageXY(self, pil_img, xyPixLeftTop, layer=0): # self.layers[layer].alpha_composite(pil_img, offset=xyPixLeftTop) - if (pil_img.mode == "RGBA"): + if (pil_img.mode == "RGBA"): pil_mask = pil_img else: pil_mask = None # print(pil_img, pil_img.mode, xyPixLeftTop, layer) - + self.layers[layer].paste(pil_img, xyPixLeftTop, pil_mask) def drawImageRC(self, pil_img, rcTopLeft, layer=0): @@ -124,7 +126,7 @@ class PILGL(GraphicsLayer): self.window = tk.Tk() self.window.title("Flatland") self.window.configure(background='grey') - #self.window.geometry('%dx%d+%d+%d' % (self.widthPx, self.heightPx, self.xPx, self.yPx)) + # self.window.geometry('%dx%d+%d+%d' % (self.widthPx, self.heightPx, self.xPx, self.yPx)) self.window_open = True def close_window(self): @@ -150,9 +152,9 @@ class PILGL(GraphicsLayer): if not self.window_open: self.open_window() - + tkimg = ImageTk.PhotoImage(img) - + if self.firstFrame: # Do TK actions for a new panel (not sure what they really do) self.panel = tk.Label(self.window, image=tkimg) @@ -182,13 +184,11 @@ class PILGL(GraphicsLayer): img = self.alpha_composite_layers() return array(img) - - def saveImage(self,filename): + def saveImage(self, filename): print(filename) img = self.alpha_composite_layers() img.save(filename) - def create_image(self, opacity=255): img = Image.new("RGBA", (self.widthPx, self.heightPx), (255, 255, 255, opacity)) return img @@ -196,11 +196,11 @@ class PILGL(GraphicsLayer): def create_layer(self, iLayer=0, clear=True): # If we don't have the layers already, create them if len(self.layers) <= iLayer: - for i in range(len(self.layers), iLayer+1): + for i in range(len(self.layers), iLayer + 1): if i == 0: opacity = 255 # "bottom" layer is opaque (for rails) else: - opacity = 0 # subsequent layers are transparent + opacity = 0 # subsequent layers are transparent img = self.create_image(opacity) self.layers.append(img) self.draws.append(ImageDraw.Draw(img)) @@ -212,17 +212,17 @@ class PILGL(GraphicsLayer): # We also need to maintain a Draw object for each layer self.draws[iLayer] = ImageDraw.Draw(img) - def create_layers(self, clear=True): + def create_layers(self, clear=True): self.create_layer(0, clear=clear) self.create_layer(1, clear=clear) class PILSVG(PILGL): - def __init__(self, width, height,jupyter=False): + def __init__(self, width, height, jupyter=False): print(self, type(self)) oSuper = super() print(oSuper, type(oSuper)) - oSuper.__init__(width, height,jupyter) + oSuper.__init__(width, height, jupyter) # self.track = self.track = Track() # self.lwTrack = [] @@ -257,19 +257,19 @@ class PILSVG(PILGL): try: with open(sfPath, "r") as fIn: bytesPNG = svg2png(file_obj=fIn, output_height=self.nPixCell, output_width=self.nPixCell) - except: - newList='' + except: # noqa: E722 + newList = '' for directory in site.getsitepackages(): x = [word for word in os.listdir(directory) if word.startswith('flatland')] - if len(x) > 0 : - newList = directory+'/'+x[0] - with open(newList+'/'+sfPath, "r") as fIn: + if len(x) > 0: + newList = directory + '/' + x[0] + with open(newList + '/' + sfPath, "r") as fIn: bytesPNG = svg2png(file_obj=fIn, output_height=self.nPixCell, output_width=self.nPixCell) with io.BytesIO(bytesPNG) as fIn: pil_img = Image.open(fIn) pil_img.load() # print(pil_img.mode) - + return pil_img def pilFromSvgBytes(self, bytesSVG): @@ -320,7 +320,7 @@ class PILSVG(PILGL): # Merge them with the regular rails. # https://stackoverflow.com/questions/38987/how-to-merge-two-dictionaries-in-a-single-expression self.dPilRail = {**self.dPilRail, **dPilRail2} - + def loadSVGs(self, dDirFile, rotate=False, agent_colors=False): dPil = {} @@ -352,7 +352,7 @@ class PILSVG(PILGL): # svg = svg.merge(svgBG) pilRail = self.pilFromSvgFile(sPathSvg) - + if rotate: # For rotations, we also store the base image dPil[binTrans] = pilRail @@ -363,7 +363,7 @@ class PILSVG(PILGL): # PIL rotates anticlockwise for positive theta pilRail2 = pilRail.rotate(-nRot) dPil[binTrans2] = pilRail2 - + if agent_colors: # For recoloring, we don't store the base image. a3BaseColor = self.rgb_s2i("d50000") @@ -409,7 +409,7 @@ class PILSVG(PILGL): (0, 0): "svg/Zug_Gleis_#0091ea.svg", (1, 2): "svg/Zug_1_Weiche_#0091ea.svg", (0, 3): "svg/Zug_2_Weiche_#0091ea.svg" - } + } # "paint" color of the train images we load a3BaseColor = self.rgb_s2i("0091ea") @@ -418,7 +418,7 @@ class PILSVG(PILGL): for tDirs, sPathSvg in dDirsFile.items(): iDirIn, iDirOut = tDirs - + pilZug = self.pilFromSvgFile(sPathSvg) # Rotate both the directions and the image and save in the dict @@ -465,4 +465,3 @@ def main(): if __name__ == "__main__": main() - diff --git a/flatland/utils/rendertools.py b/flatland/utils/rendertools.py index 1c2185b6..7db0cc53 100644 --- a/flatland/utils/rendertools.py +++ b/flatland/utils/rendertools.py @@ -3,19 +3,19 @@ from collections import deque # import xarray as xr import matplotlib.pyplot as plt -from flatland.utils.render_qt import QTGL, QTSVG -from flatland.utils.graphics_pil import PILGL, PILSVG -from flatland.utils.graphics_layer import GraphicsLayer -from recordtype import recordtype -from numpy import array import numpy as np +from numpy import array +from recordtype import recordtype -# TODO: suggested renaming to RailEnvRenderTool, as it will only work with RailEnv! +from flatland.utils.graphics_layer import GraphicsLayer +from flatland.utils.graphics_pil import PILGL, PILSVG +from flatland.utils.render_qt import QTGL, QTSVG -import os + +# TODO: suggested renaming to RailEnvRenderTool, as it will only work with RailEnv! class MPLGL(GraphicsLayer): - def __init__(self, width, height,jupyter=False): + def __init__(self, width, height, jupyter=False): self.width = width self.height = height self.yxBase = array([6, 21]) # pixel offset @@ -127,15 +127,15 @@ class RenderTool(object): # self.gl = MPLGL() if gl == "MPL": - self.gl = MPLGL(env.width, env.height,jupyter) + self.gl = MPLGL(env.width, env.height, jupyter) elif gl == "QT": - self.gl = QTGL(env.width, env.height,jupyter) + self.gl = QTGL(env.width, env.height, jupyter) elif gl == "PIL": - self.gl = PILGL(env.width, env.height,jupyter) + self.gl = PILGL(env.width, env.height, jupyter) elif gl == "PILSVG": - self.gl = PILSVG(env.width, env.height,jupyter) + self.gl = PILSVG(env.width, env.height, jupyter) elif gl == "QTSVG": - self.gl = QTSVG(env.width, env.height,jupyter) + self.gl = QTSVG(env.width, env.height, jupyter) self.new_rail = True @@ -704,7 +704,6 @@ class RenderTool(object): def getImage(self): return self.gl.getImage() - def plotTreeObs(self, gObs): nBranchFactor = 4 @@ -735,10 +734,11 @@ class RenderTool(object): gP0 = array([gX1, gY1, gZ1]) def renderEnv2( - self, show=False, curves=True, spacing=False, arrows=False, agents=True, - show_observations=True, sRailColor="gray", - frames=False, iEpisode=None, iStep=None, iSelectedAgent=None, - action_dict=dict()): + self, show=False, curves=True, spacing=False, arrows=False, agents=True, + show_observations=True, sRailColor="gray", + frames=False, iEpisode=None, iStep=None, iSelectedAgent=None, + action_dict=dict() + ): """ Draw the environment using matplotlib. Draw into the figure if provided. diff --git a/tests/test_player.py b/tests/test_player.py index 876db6b3..75b75c47 100644 --- a/tests/test_player.py +++ b/tests/test_player.py @@ -1,12 +1,12 @@ - from examples.play_model import main + + # from examples.tkplay import tkmain def test_main(): main(render=True, n_steps=20, n_trials=2, sGL="PIL") main(render=True, n_steps=20, n_trials=2, sGL="PILSVG") - if __name__ == "__main__": diff --git a/tests/test_rendertools.py b/tests/test_rendertools.py index dade28fc..04d749bc 100644 --- a/tests/test_rendertools.py +++ b/tests/test_rendertools.py @@ -10,9 +10,9 @@ import matplotlib.pyplot as plt import numpy as np import flatland.utils.rendertools as rt -from flatland.envs.observations import TreeObsForRailEnv -from flatland.envs.rail_env import RailEnv, random_rail_generator from flatland.envs.generators import empty_rail_generator +from flatland.envs.observations import TreeObsForRailEnv +from flatland.envs.rail_env import RailEnv def checkFrozenImage(oRT, sFileImage, resave=False): @@ -28,11 +28,10 @@ def checkFrozenImage(oRT, sFileImage, resave=False): # this is now just for convenience - the file is not read back np.savez_compressed(sDirImages + "test/" + sFileImage, img=img_test) - image_store = np.load(sDirImages + sFileImage) - img_expected = image_store["img"] + np.load(sDirImages + sFileImage) # TODO fails! - #assert (img_test.shape == img_expected.shape) + # assert (img_test.shape == img_expected.shape) # assert ((np.sum(np.square(img_test - img_expected)) / img_expected.size / 256) < 1e-3), \ # "Image {} does not match".format(sFileImage) -- GitLab