diff --git a/examples/demo.py b/examples/demo.py index 40ebeb4c776e5ac245328eff76f2cde5339a1cd8..783df56e8b8b534450031cc9e40a2bd30ef11ebd 100644 --- a/examples/demo.py +++ b/examples/demo.py @@ -96,6 +96,7 @@ class Demo: for iAgent in range(self.env.get_num_agents()): # allways walk straight forward action = 2 + action = np.random.choice([0, 1, 2, 3], 1, p=[0.0, 0.5, 0.5, 0.0])[0] # update the actions action_dict.update({iAgent: action}) diff --git a/flatland/utils/editor.py b/flatland/utils/editor.py index 081cf02c804f5a8d64542b2cfdc75c664bc479a9..6137a07ff83f296b766d6d5bac0dd67fb36d966a 100644 --- a/flatland/utils/editor.py +++ b/flatland/utils/editor.py @@ -9,7 +9,6 @@ from ipywidgets import IntSlider, VBox, HBox, Checkbox, Output, Text, RadioButto from numpy import array import flatland.utils.rendertools as rt -from examples.play_model import Player from flatland.envs.agent_utils import EnvAgent, EnvAgentStatic from flatland.envs.env_utils import mirror from flatland.envs.generators import complex_rail_generator, empty_rail_generator @@ -75,10 +74,6 @@ class View(object): self.wDebug_move = Checkbox(description="Debug mouse move") self.wDebug_move.observe(self.controller.setDebugMove, names="value") - # Checkbox for rendering observations - self.wShowObs = Checkbox(description="Show Agent Observations") - self.wShowObs.observe(self.controller.refresh, names="value") - # This is like a cell widget where loggin goes self.wOutput = Output() @@ -109,13 +104,9 @@ class View(object): for i, title in enumerate(tab_contents): self.wTab.set_title(i, title) self.wTab.children = [ - VBox([self.wRegenSizeWidth, self.wRegenSizeHeight, self.wRegenNAgents]), - VBox([self.wShowObs]), + VBox([self.wRegenSizeWidth, self.wRegenSizeHeight, self.wRegenNAgents]) ] - # Progress bar intended for stepping in the background (not yet working) - self.wProg_steps = ipywidgets.IntProgress(value=0, min=0, max=20, step=1, description="Step") - # abbreviated description of buttons and the methods they call ldButtons = [ dict(name="Refresh", method=self.controller.refresh, tip="Redraw only"), @@ -128,7 +119,6 @@ class View(object): tip="Regenerate the rails using the method selected below"), dict(name="Load", method=self.controller.load), dict(name="Save", method=self.controller.save), - dict(name="Step", method=self.controller.step) ] self.lwButtons = [] @@ -166,7 +156,7 @@ class View(object): self.oRT.renderEnv(spacing=False, arrows=False, sRailColor="gray", agents=True, show=False, iSelectedAgent=self.model.iSelectedAgent, - show_observations=self.show_observations()) + show_observations=False) img = self.oRT.getImage() self.wImage.data = img @@ -201,13 +191,6 @@ class View(object): else: print(*args, **kwargs) - def show_observations(self): - ''' returns whether to show observations - boolean ''' - if self.wShowObs.value: - return True - else: - return False - class Controller(object): """ @@ -360,7 +343,6 @@ class Controller(object): self.model.init_agents_static] self.model.env.agents = None self.model.init_agents_static = None - self.player = None self.model.env.restart_agents() self.model.env.reset(False, False) self.refresh(event) @@ -413,7 +395,6 @@ class EditorModel(object): self.env_filename = "temp.pkl" self.set_env(env) self.iSelectedAgent = None - self.player = None self.init_agents_static = None self.thread = None @@ -616,7 +597,6 @@ class EditorModel(object): self.env.rail.grid[:, :] = 0 self.env.agents = [] self.env.agents_static = [] - self.player = None self.redraw() @@ -631,7 +611,6 @@ class EditorModel(object): def restartAgents(self): self.env.agents = EnvAgent.list_from_static(self.env.agents_static) - self.player = None self.redraw() def setFilename(self, filename): @@ -650,6 +629,7 @@ class EditorModel(object): self.env.restart_agents() self.env.reset(False, False) self.init_agents_static = None + self.view.oRT.update_background() self.fix_env() self.set_env(self.env) self.redraw() @@ -688,7 +668,6 @@ class EditorModel(object): self.env.reset(regen_rail=True) self.fix_env() self.set_env(self.env) - self.player = None self.view.new_env() self.redraw() @@ -721,7 +700,7 @@ class EditorModel(object): # Create a new agent and select it. agent_static = EnvAgentStatic(rcCell, 0, rcCell, moving=False) self.iSelectedAgent = self.env.add_agent_static(agent_static) - self.player = None # will need to start a new player + self.view.oRT.update_background() else: # Move the selected agent to this cell agent_static = self.env.agents_static[self.iSelectedAgent] @@ -745,26 +724,9 @@ class EditorModel(object): if self.iSelectedAgent is not None: self.env.agents_static[self.iSelectedAgent].target = rcCell self.init_agents_static = None + self.view.oRT.update_background() self.redraw() - def step(self): - if self.init_agents_static is None: - self.init_agents_static = [agent.to_list() for agent in self.env.agents_static] - if self.player is None: - self.player = Player(self.env) - self.env.reset(regen_rail=False, replace_agents=False) - self.player.step() - self.redraw() - - def bg_updater(self, wProg_steps): - try: - for i in range(20): - self.step() - time.sleep(0.2) - wProg_steps.value = i + 1 # indicate progress on bar - finally: - self.thread = None - def fix_env(self): self.env.width = self.env.rail.width self.env.height = self.env.rail.height diff --git a/flatland/utils/graphics_pil.py b/flatland/utils/graphics_pil.py index 23f8b8790a44be3d4835a1a9594effaa1ee33164..f3a27c59c9701d23084c232cc842f79534e4401c 100644 --- a/flatland/utils/graphics_pil.py +++ b/flatland/utils/graphics_pil.py @@ -358,17 +358,17 @@ class PILSVG(PILGL): "NN SS": "Bahnhof_#d50000_Gleis_vertikal.svg"} # Dict of rail cell images indexed by binary transitions - self.dPilRail = self.loadSVGs(dRailFiles, rotate=True, backgroundImage="Background_rail.svg", + dPilRailFiles = self.loadSVGs(dRailFiles, rotate=True, backgroundImage="Background_rail.svg", whitefilter="Background_white_filter.svg") # Load the target files (which have rails and transitions of their own) # They are indexed by (binTrans, iAgent), ie a tuple of the binary transition and the agent index - dPilRail2 = self.loadSVGs(dTargetFiles, rotate=False, agent_colors=self.ltAgentColors, - backgroundImage="Background_rail.svg", - whitefilter="Background_white_filter.svg") + dPilTargetFiles = self.loadSVGs(dTargetFiles, rotate=False, agent_colors=self.ltAgentColors, + backgroundImage="Background_rail.svg", + whitefilter="Background_white_filter.svg") # 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} + self.dPilRail = {**dPilRailFiles, **dPilTargetFiles} def loadSVGs(self, dDirFile, rotate=False, agent_colors=False, backgroundImage=None, whitefilter=None): dPil = {} @@ -445,13 +445,13 @@ class PILSVG(PILGL): self.drawImageRC(pilTrack, (row, col)) else: - print("Illegal rail:", row, col, format(binTrans, "#018b")[2:]) + print("Illegal rail:", row, col, format(binTrans, "#018b")[2:], binTrans) else: if (binTrans, iTarget) in self.dPilRail: pilTrack = self.dPilRail[(binTrans, iTarget)] self.drawImageRC(pilTrack, (row, col)) else: - print("Illegal target rail:", row, col, format(binTrans, "#018b")[2:]) + print("Illegal target rail:", row, col, format(binTrans, "#018b")[2:], (binTrans, iTarget)) if isSelected: svgBG = self.pilFromSvgFile("svg", "Selected_Target.svg") diff --git a/notebooks/Scene_Editor.ipynb b/notebooks/Scene_Editor.ipynb index 444c1ebf023a06294b04f58a4f180a46608f6d96..cf4deebb5d8689b7f593a9594c77cda33b8deab0 100644 --- a/notebooks/Scene_Editor.ipynb +++ b/notebooks/Scene_Editor.ipynb @@ -11,29 +11,6 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [], - "source": [ - "%load_ext autoreload\n", - "%autoreload 2" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from numpy import array\n", - "import ipywidgets\n", - "import IPython\n", - "from IPython.core.display import display, HTML" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, "outputs": [ { "data": { @@ -49,24 +26,17 @@ } ], "source": [ + "from IPython.core.display import display, HTML\n", "display(HTML(\"<style>.container { width:95% !important; }</style>\"))" ] }, { "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "from flatland.utils.editor import EditorMVC" - ] - }, - { - "cell_type": "code", - "execution_count": 5, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ + "from flatland.utils.editor import EditorMVC\n", "mvc = EditorMVC(sGL=\"PILSVG\" ) " ] }, @@ -92,7 +62,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 3, "metadata": { "scrolled": false }, @@ -100,7 +70,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "140f16d2c9a643e39d68c6421e50b9bd", + "model_id": "a1b27bcebefc4ddebb5bde8297d52d9e", "version_major": 2, "version_minor": 0 }, diff --git a/rendering/make_video_ffmpeg.txt b/rendering/make_video_ffmpeg.txt index 198b660db97c711adbb10bb082f7dd62132bac08..982b5066d7b243a766d0fa6ce9955c72c075126f 100644 --- a/rendering/make_video_ffmpeg.txt +++ b/rendering/make_video_ffmpeg.txt @@ -1,4 +1,6 @@ ffmpeg -y -framerate 12 -i frame_%04d.bmp -hide_banner -c:v libx264 -pix_fmt yuv420p test.mp4 +ffmpeg -i test.mp4 test.gif + pause \ No newline at end of file diff --git a/tox.ini b/tox.ini index 43a02f37343c8a09ea7825e525992842944d420f..61f8b0a9427b8d09e51540c7e047026c56466693 100644 --- a/tox.ini +++ b/tox.ini @@ -98,7 +98,9 @@ deps = commands = ; run tests from subfolder to ensure that resources are accessed via resources and not via relative paths sh -c 'mkdir -p {envtmpdir}/6f59bc68108c3895b1828abdd04b9a06' + sh -c 'jupyter nbextension install --py --sys-prefix widgetsnbextension' sh -c 'jupyter nbextension enable --py --sys-prefix widgetsnbextension' + sh -c 'jupyter nbextension install --py --sys-prefix jpy_canvas' sh -c 'jupyter nbextension enable --py --sys-prefix jpy_canvas' ; https://stackoverflow.com/questions/35545402/how-to-run-an-ipynb-jupyter-notebook-from-terminal/35545463 sh -c 'ls notebooks/*.ipynb | xargs -n 1 jupyter nbconvert --to python'