mirror of
https://github.com/Farama-Foundation/Gymnasium.git
synced 2025-08-22 15:11:51 +00:00
* add pygame GUI for frozen_lake.py env * add new line at EOF * pre-commit reformat * improve graphics * new images and dynamic window size * darker tile borders and fix ICC profile * pre-commit hook * adjust elf and stool size * Update frozen_lake.py * reformat * fix #2600 * #2600 * add rgb_array support * reformat * test render api change on FrozenLake * add render support for reset on frozenlake * add clock on pygame render * new render api for blackjack * new render api for cliffwalking * new render api for Env class * update reset method, lunar and Env * fix wrapper * fix reset lunar * new render api for box2d envs * new render api for mujoco envs * fix bug * new render api for classic control envs * fix tests * add render_mode None for CartPole * new render api for test fake envs * pre-commit hook * fix FrozenLake * fix FrozenLake * more render_mode to super - frozenlake * remove kwargs from frozen_lake new * pre-commit hook * add deprecated render method * add backwards compatibility * fix test * add _render * move pygame.init() (avoid pygame dependency on init) * fix pygame dependencies * remove collect_render() maintain multi-behaviours .render() * add type hints * fix renderer * don't call .render() with None * improve docstring * add single_rgb_array to all envs * remove None from metadata["render_modes"] * add type hints to test_env_checkers * fix lint * add comments to renderer * add comments to single_depth_array and single_state_pixels * reformat * add deprecation warnings and env.render_mode declaration * fix lint * reformat * fix tests * add docs * fix car racing determinism * remove warning test envs, customizable modes on renderer * remove commments and add todo for env_checker * fix car racing * replace render mode check with assert * update new mujoco * reformat * reformat * change metaclass definition * fix tests * implement mark suggestions (test, docs, sets) * check_render Co-authored-by: J K Terry <jkterry0@gmail.com>
80 lines
3.2 KiB
Python
80 lines
3.2 KiB
Python
"""A utility class to collect render frames from a function that computes a single frame."""
|
|
from typing import Any, Callable, List, Optional, Set
|
|
|
|
# list of modes with which render function returns None
|
|
NO_RETURNS_RENDER = {"human"}
|
|
|
|
# list of modes with which render returns just a single frame of the current state
|
|
SINGLE_RENDER = {"single_rgb_array", "single_depth_array", "single_state_pixels"}
|
|
|
|
|
|
class Renderer:
|
|
"""This class serves to easily integrate collection of renders for environments that can computes a single render.
|
|
|
|
To use this function:
|
|
- instantiate this class with the mode and the function that computes a single frame
|
|
- call render_step method each time the frame should be saved in the list
|
|
(usually at the end of the step and reset methods)
|
|
- call get_renders whenever you want to retrieve renders
|
|
(usually in the render method)
|
|
- call reset to clean the render list
|
|
(usually in the reset method of the environment)
|
|
"""
|
|
|
|
def __init__(
|
|
self,
|
|
mode: Optional[str],
|
|
render: Callable[[str], Any],
|
|
no_returns_render: Optional[Set[str]] = None,
|
|
single_render: Optional[Set[str]] = None,
|
|
):
|
|
"""Instantiates a Renderer object.
|
|
|
|
Args:
|
|
mode (Optional[str]): Way to render
|
|
render (Callable[[str], Any]): Function that receives the mode and computes a single frame
|
|
no_returns_render (Optional[Set[str]]): Set of render modes that don't return any value.
|
|
The default value is the set {"human"}.
|
|
single_render (Optional[Set[str]]): Set of render modes that should return a single frame.
|
|
The default value is the set {"single_rgb_array", "single_depth_array", "single_state_pixels"}.
|
|
"""
|
|
if no_returns_render is None:
|
|
no_returns_render = NO_RETURNS_RENDER
|
|
if single_render is None:
|
|
single_render = SINGLE_RENDER
|
|
|
|
self.no_returns_render = no_returns_render
|
|
self.single_render = single_render
|
|
self.mode = mode
|
|
self.render = render
|
|
self.render_list = []
|
|
|
|
def render_step(self) -> None:
|
|
"""Computes a frame and save it to the render collection list.
|
|
|
|
This method should be usually called inside environment's step and reset method.
|
|
"""
|
|
if self.mode is not None and self.mode not in SINGLE_RENDER:
|
|
render_return = self.render(self.mode)
|
|
if self.mode not in NO_RETURNS_RENDER:
|
|
self.render_list.append(render_return)
|
|
|
|
def get_renders(self) -> Optional[List]:
|
|
"""Pops all the frames from the render collection list.
|
|
|
|
This method should be usually called in the environment's render method to retrieve the frames collected till this time step.
|
|
"""
|
|
if self.mode in SINGLE_RENDER:
|
|
return self.render(self.mode)
|
|
elif self.mode is not None and self.mode not in NO_RETURNS_RENDER:
|
|
renders = self.render_list
|
|
self.render_list = []
|
|
return renders
|
|
|
|
def reset(self):
|
|
"""Resets the render collection list.
|
|
|
|
This method should be usually called inside environment's reset method.
|
|
"""
|
|
self.render_list = []
|